Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Classification of Development Frameworks for Enterprise Apps

DZone's Guide to

Classification of Development Frameworks for Enterprise Apps

This compilation of popular frameworks classifies them for ease of reference for enterprise app development. Check out which category will help your use case.

· Java Zone ·
Free Resource

Take 60 minutes to understand the Power of the Actor Model with "Designing Reactive Systems: The Role Of Actors In Distributed Architecture". Brought to you in partnership with Lightbend.

If you Google "best Java framework", most probably, you will stumble on this article, which gives a great overview of 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.

Image title

Picking the best framework for developing an application (or another framework), means trying to find the best trade-off between the following criteria:

  1. Range of Applicability — what part of the application can be developed using the framework? Do I need a set of frameworks or just one?
  2. Development Speed — how fast will development go?
  3. Manageability and 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 and 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.

Narrow-Focused Frameworks

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.

Code Generators/Aggregators

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 an 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 an 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 three-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 a 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.

Summary

Choosing the right framework 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 and 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 the 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.

Class

Typical Applications

"No Frameworks" Approach

  • Narrow-focused frameworks
  • Low-level products, e.g. in-memory grids, big data processing algorithms, image recognition, etc.

Narrow-focused Frameworks

  • Enterprise apps with unique (uncommon) architecture
  • Microservices
  • Custom backends
  • E-commerce platforms
  • Enterprise Service Bus

Code Generators/Aggregators

  • Boost at the kick-off stage for the same kind of applications as for narrow-focused frameworks

High-level Full-stack Frameworks

  • ERP applications
  • Custom BPMS applications
  • Master data management applications
  • Line of business applications
  • Custom applications with typical enterprise requirements

Low/No Code Frameworks

  • Simple websites
  • Standard online stores
  • Corporate portals
  • Simple/Typical BPMS
  • Basic CRUD applications

Learn how the Actor model provides a simple but powerful way to design and implement reactive applications that can distribute work across clusters of cores and servers. Brought to you in partnership with Lightbend.

Topics:
java ,enterprise app development ,app development frameworks ,low-code platform ,full-stack development

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}