Dear all,
We would like your thoughts on advantages/disadvantages of a very fine grained modular ADF approach – a somewhat extreme variant perhaps of the pillar architecture.
Currently we are building a very large ADF 12.2.1 application (500+ screens, 500+ taskflows) and we are considering very small ADF projects (vs. medium sized ADF projects). Each logical set of functions results in one very small JDeveloper project and results in one ADF library that is consumed into the main application:
These very small projects can be developed, build, tested and released independently. The advantages we see (and have seen in the past):
This all versus medium sized ADF projects with ±50 EntityObjects, ±50 ViewObjects, one ApplicationModule and ± 25 taskflows.
Question:
Regards,
Frank Houweling
Hi Frank,
In hindsight in developing the various ADF patterns some years back, I think in many ways thanks to the highly reusable platform ADF provides, we were exploring many of the ideas of "service based architectures" and "how large should your services be" from Martin Fowler's microservices movement (and SOA earlier than that too). Admittedly there is a difference between ADF and microservices, ADF being UI/flows + data services, while microservices is predominantly just data services, but they are still all services so parallels do exist.
Why I mention this is I think Martin Fowler has well articulated the concept of microservices and the challenges of service based architectures (being able to articulate the ideas to the wider community is one of his biggest skills imho), AND he has given thought to when to use them and NOT use them. And I think this has some parallels and lessons to be learned in a fine grained ADF architecture:
http://martinfowler.com/articles/microservice-trade-offs.html
Of specific note, Martin Fowler points out "Operational Complexity" as a key point to consider:
"Microservice proponents like to point out that since each service is smaller it's easier to understand. But the danger is that complexity isn't eliminated, it's merely shifted around to the interconnections between services. This can then surface as increased operational complexity, such as the difficulties in debugging behavior that spans services. Good choices of service boundaries will reduce this problem, but boundaries in the wrong place makes it much worse.
Handling this operational complexity requires a host of new skills and tools - with the greatest emphasis being on the skills. Tooling is still immature, but my instinct tells me that even with better tooling, the low bar for skill is higher in a microservice environment."
So as usual the answer to should you go for a fine grained ADF architecture (or microservices) or not is "it depends". If you have a senior well disciplined development team, go for it. Will the maintenance team beyond you have these skills? Be careful they can maintain what you've created. If you're just starting out, have not much experience in ADF or devops or continuous builds, don't mount more pressure on yourself than you need too when starting out, KISS.
In turn how large or small should your services be? Well that depends too where your operational boundaries lie.
This is why in the original ADF Angels in the Architecture presentation we were so cautious to recommend any one pattern over the other. One size doesn't fit all.
Of course I no longer work in the ADF space, and I'm sure ADF contemporary developers such as yourselves have a much better idea of what is and isn't possible with ADF today.
If I can add one final piece of potentially Aussie advice. Sometimes we over analysis this stuff and just need to get on with the job, make a decision, and live with the consequences, there are rarely perfect solutions.
Hope this helps,
CM.
--
--
You received this message because you are subscribed to the ADF Enterprise Methodology Group (http://groups.google.com/group/adf-methodology). To unsubscribe send email to adf-methodology+unsubscribe@googlegroups.com
All content to the ADF EMG lies under the Creative Commons Attribution 3.0 Unported License (http://creativecommons.org/licenses/by/3.0/). Any content sourced must be attributed back to the ADF EMG with a link to the Google Group (http://groups.google.com/group/adf-methodology).
---
You received this message because you are subscribed to the Google Groups "ADF Enterprise Methodology Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to adf-methodology+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
--
You received this message because you are subscribed to the ADF Enterprise Methodology Group (http://groups.google.com/group/adf-methodology). To unsubscribe send email to adf-methodolo...@googlegroups.com
All content to the ADF EMG lies under the Creative Commons Attribution 3.0 Unported License (http://creativecommons.org/licenses/by/3.0/). Any content sourced must be attributed back to the ADF EMG with a link to the Google Group (http://groups.google.com/group/adf-methodology).
---
You received this message because you are subscribed to the Google Groups "ADF Enterprise Methodology Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to adf-methodolo...@googlegroups.com.
--
--
You received this message because you are subscribed to the ADF Enterprise Methodology Group (http://groups.google.com/group/adf-methodology). To unsubscribe send email to adf-methodology+unsubscribe@googlegroups.com
All content to the ADF EMG lies under the Creative Commons Attribution 3.0 Unported License (http://creativecommons.org/licenses/by/3.0/). Any content sourced must be attributed back to the ADF EMG with a link to the Google Group (http://groups.google.com/group/adf-methodology).
---
You received this message because you are subscribed to the Google Groups "ADF Enterprise Methodology Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to adf-methodology+unsubscribe@googlegroups.com.
Hi Frank,
As Chris stated, the approach you describe has some similarities with a microservices based architecture.When we started our current project we faced the same considerations. We even thought about a setup where every taskflow was an application/project on it's own.
In the end, it all comes down to the question: Which kind of integration between the modules is needed and where are you going to put the complexity and effort to achieve that integration?
When the taskflows are predominantly autonomous and the main integration point is some kind of menu/master application that functions as the entry point for the end user, then a fine grained architecture will do. However, when the integration points between taskflows are less trivial - a lot of taskflow calls, taskflows embedded in other taskflows as region, etc. - then the integration is much easier to achieve when the taskflows concerned are in the same project. (Despite features as ADF libraries, remote taskflows, etc.)
So, a decision pattern might be to group taskflows that are likely to be integrated in an non-trivial way in the same application/project/cylinder/pillar/whatever you name it. And to separate taskflows that are unlikely to be integrated in a complex way. This might lead to a vast diversity in project sizes; let's call it the "Fitted for purpose" architecture.
Supposing you are using ADFBC, I think the placement of entity objects deserves some extra attention. Splitting an application in more and more (autonomous) parts increases the likelihood of multiple entity objects addressing the same database object across projects. As the entity object is the main gateway for all DML and related business rules, it might be beneficial in terms of robustness and maintainability to subtract them from the individual projects and centralize in some kind of common model project.
Regards,
Eric