This is a question that I see from time to time coming from customers who are getting started with JDeveloper and ADF. On the face of it, both TopLink and ADF BC do the same thing - take care of persistence and eliminate a lot of SQL writing for CRUD operations when working with a database. So why does Oracle have both? and which one is right for me?
Well my answer is that each one is suitable for a specific type of developer/project.
Let's face it, not all developers come from the same background and not all developers think the same way.
Basically for the ADF BC vs TopLink debate I'll break down projects and developers into two camps - one is thinking OO and the other one is thinking SQL - if you are thinking OO than TopLink is for you, and if you are thinking SQL than ADF BC is for you.
Let me give you a simple test to see what type of developer, or what type of project you are in.
When you think about your upcoming application do you think: "I'm going to have a department object with a methods exposed that will let me access the department details and also the collection of employees which will be one of the attribute of the department"?
Or do you think more along the lines of "I'm going to have this form were I'll show information from the departments table as the master and also the information about employees based on the Foreign-Key defined in the database?
As you can see these are two different ways to approach the same problem. And I guarantee that if you are thinking like the first sample you'll like TopLink more, and if you are thinking along the second line ADF BC is more up your alley.
The point is that TopLink comes from developers who were thinking in object oriented style and wrote something to make interaction between objects and the database simple. and ADF BC came from guys who were thinking in the way that most 4GL client/server tools were working (Think Oracle Forms, Powerbuilder etc) - which is how do I access these tables in the database and show them on my Form.
So there you have it, it might seem a little bit of oversimplifying the picture - but I think you'll find that this is the best approach for making the choice. No need to look into all the little features that set those two framework apart, just use this simple test and you should be fine.