Classification of Development Frameworks for Enterprise Applications
If you google "best java framework", most probably, you will stumble on this article, which gives a great overview about the landscape in the Java Enterprise world. However, from my point of view it lacks a very important thing - classification of the mentioned frameworks. Let's have a look at another angle at this ecosystem and go beyond the Java world.
Picking the best framework for developing an application (or a set of frameworks), means trying to find the best trade-off between the following criteria:
- Range of Applicability - what part of the application can be developed using the framework? Do I need a set of frameworks or just one?
- Development Speed - how fast will development go?
- Manageability & Flexibility - what would be the architectural, performance and other limitations?
Classification of Frameworks
Combining the mentioned criteria with a set of reference frameworks for each class and their outstanding characteristics in one diagram I got the following result:
High-level Programming Languages or "No Frameworks" Approach
This "no frameworks" approach is a degenerate case, which gives the widest Range of Applicability and highest Manageability & Flexibility you could ever get. Obviously, this is the slowest way for developing enterprise applications, as you would need to reinvent all the wheels. Normally, this level is used for building frameworks, that make development speed one step higher.
This class has the biggest number of representatives. All of them are intended to streamline development in a certain fairly small area by raising the level of abstraction and providing a clear API for its domain. Tying up ORM, Middleware, UI, Messaging and other kinds of frameworks is not a trivial task, however, staying within this class you have a mix of satisfactory development speed with a high level of flexibility.
This class is intended to speed up the early stage of applications development. In fact they configure your application based on the Narrow-focused Frameworks. So, taking JHipster as an example, it will generate a Spring-based application with Angular-based user interface. After the startup stage there is no much value in using such frameworks.
High-level Full-stack Frameworks
This class introduces the next abstraction level over the Narrow-focused Frameworks. So, you already have entire infrastructure to build a full-scale enterprise applications times faster. Taking CUBA Platform as an example, it provides a full-stack architecture for building 3 tier applications and includes widely used common features for enterprise apps such as soft deletion, data-aware components, file storage, as well as high level modules: authentication and authorization, audit of data and others. This class is most appropriate for developing ERP-like systems, line of business applications or custom software for the corporate segment.
Low/No Code Frameworks
At this stage you totally lose control over the code base, developing only small bits of logic in the pre-defined extension points. So, if such framework meets your requirements in terms of performance, deployment options, UI components, integrations, etc. - this would be the fastest way to configure your application. However, it might happen that one day you will not be able to step over the architectural limitations.
Choosing the right framework of a set of frameworks for developing an enterprise application is not just about surfing the Internet looking for "top frameworks for enterprise" and picking from the top of the list. First of all, it's about solving the trade-off and finding a right mix of Range of Applicability, Development Speed and Flexibility & Manageability that meets your requirements. Once it is solved, you will be able to focus on choosing a framework itself within the right class, checking for another bunch of criteria: e.g. preferable programming language, size of community, quality of vendor support, success stories, and so on…
To sum up, I would like to provide a table with the framework classes and typical applications, they fit best.
"No Frameworks" Approach
|High-level Full-stack Frameworks|
Low/No Code Frameworks