Wednesday, October 2, 2019

What is Oracle ADF?

What it is NOT?
1. User Interface (UI)
2. Forms
3. a Development Tool
4. IDE(Integrated Development Environment)
6. Another Programming Language
7. Front End
8. Pretty looking GUI(Graphical User Interface)

I get all these kinds of responses when I ask around to folks in the technical world, who knows what ADF stands for but have never worked in ADF before.
But I have met very few people who have told me that it's a "framework". Now this is when I get really excited and jump onto the next question about what do they mean by a "framework".

You see, Oracle has done such a great job of integrating ADF into development environment like JDeveloper that often people feel that it's a development tool which you can use to drag and drop "things" to create "pretty UI". Often then, it's forgotten that a framework is something much more than just a tool.

And this is why I am writing this post about ADF. To attempt to give a clear picture about what Oracle ADF is. But before that, it's really important to understand what exactly a "software application framework" is and why ADF is one of them and not just one of those 8 items listed above.

Simply put, a software application framework is a building block of any software application which is developed using the framework. These applications can be totally different from each other based on who uses it, how they use it and what features it provides even if it has the same underlying framework that governs certain common underlying behaviors of the system. That said, a framework will have these basic characteristics:
1. Reusability - The same framework can be reused to build n number of applications that are different from each other
2. Extensibility - Framework can be extended by developers to provide more selective and specialized functionality of an application.
3. Interactivity - Framework defines how different components of the framework interact with each other which are abstracted or exposed as a service to the developers.

With that said, let's see how ADF fits into this framework definition
1. Reusability: Since ADF is based on JEE specifications, the framework has already the built reusability feature such that applications can be developed either by reusing some or all of the framework components. New modules/components can be developed using ADF that can further be re-used in different applications. This leads to the discussion of extensibility
2. Extensibility: ADF has 3 key pieces that interact with each other in a seamless way than any other MVC(Model View Controller)  based framework: ADF Model(formerly known as BC4J), ADF View and ADF Controller. New applications are developed using these key ingredients or new libraries or reusable components can be developed to extend other applications developed using ADF.
3. Interactivity: ADF framework has been greatly optimized to work harmoniously with ADF Model, ADF View and ADF Controller. Moreover, ADF also provides hooks and connections to other building blocks of java applications like TopLink, Webservices and so on. Developers do not have to worry about how these interactions are done internally because it comes natural as part of the framework which is what a framework should have.
4. Abstraction: In near realtime turnaround of application development these days with Agile methodologies and such, ADF provides abstraction to the developers where they do not have to worry about interactivity between various underlying services so that they can focus more on the business logic side of the application.



Gathering feedback from users for ADF Application

One of the projects in ADF I worked on for a client.
To improve the user experience for the users of their ADF application, I handed over a list of questionnaire and asked for feedback from each of their users. I thought it was a useful way to gather user feedback and get them thinking about next set of improvements to the application from UI perspective instead of adding new functionality in each release:

Questions to the key stake holders:
  1. 1.       What are some of the pain areas in existing Application?
    2.       What do you think about the existing user experience?
    3.       Are users clicking too many times to get the job done?
    4.       Are the UI pages intuitive for users? Or are they lost for the first few seconds when they land on a page before they figure out what needs to be done?
    5.       Is the UI simple or too complex?
    6.       What are the Key Performance Indicators of this application?
    7.       What would you like the Key Performance Indicators be for this application?
    8.       What is one of the best UI experience for the user?
    9.       What is one of the worst UI experience for the user?
Questions to user base:
  1. How often do internal users login to the application?
  2. How often do external users login to the application?
  3. How long do they stay in the application?
  4. What is the first thing you would like to see when you log in?
  5. Are users performing search or are they taking an action on something most of the time while in the application?
This is definitely not the exhaustive list. There is a lot that can be asked to users to make ADF application experiece at its best. But this is just something to get started and get the user community think about their own user experience.