Modernizing Enterprise Software Applications: Specific Technologies (part 7 of 7)
Java Enterprise
What was once a more fragmented space has largely consolidated around the Spring and Spring Boot frameworks. Some new frameworks are gaining traction specifically in the space of microservices, particularly where resources and startup time are involved, but Spring continues to work to stay at the front of such trends. Notable in Spring is its extremely flexible dependency injection, making it a strong target for porting legacy dependency injection code but also providing added functionality that can help with migrations.
The open source nature of the Java ecosystem lends itself to a strong variety of approaches and opinions, and advocates exist both for following best practice frameworks, as well as for writing custom code from first principles. Microservices with their intrinsic limit to complexity can add to the attraction of not needing frameworks at all, but long-term maintainability, onboarding and resourcing still make a strong case for using community solutions where possible.
JSR standards continue to play an important part in community harmonization. The more disciplined frameworks encourage their use, and where they have been followed, moving injected dependencies, persistence-annotated entities and validation-annotated beans from a source to a target framework is made low effort, excepting where implementation-specific enhancements have been used.
.NET and .NET Core
With the recent release of .NET Core 3.1 and the announcement that all future releases of .NET will be based on .NET Core, now is the ideal time to start plans for the future of any enterprise applications. Unlike its predecessor, .NET Core is an open-sourced framework that supports Linux and macOS as well as Windows platforms opening cross platform opportunities that were previously only available in Java.
The .NET Core platform implements a common interface in many cases with the soon to be legacy .NET Framework. By supporting this commonality, the two platforms can interoperate for a period of time during any modernization projects providing more options for how projects are rolled out.
A strong native DI/IOC engine in .NET Core fosters testability from the ground up in modern projects. New projects may find it very easy to make use the new native engine, while projects that are transitioning from older versions may find that the ability to configure .NET Core to use 3rd party libraries like AutoFac, or Spring.NET instead of the native engine may reduce the risk of migration and further open incremental opportunities for improvement.
Security and performance are always top of mind with .NET Core as well. With the latest release, tremendous improvements in performance have been achieved across the board. Security updates are in your control, reducing or eliminating those pesky updates that come every month causing unexpected behavior through the use of NuGet packages that can be updated and delivered as part of a well-tested rollout.
There is a lot that .NET Core can bring to a modernization project. The inclusion of multiplatform support, the open source community, strong security, performance and testability tools built in from the ground up position .NET Core as a solid framework well into the future. Couple that with a robust development environment and integrated collaboration tools like Live Share, teams of any size or configuration can effectively navigate the challenges in any modernization project.
Angular / React / Other Front-Ends
Some trends in the front-end have special significance for modernization efforts.
Angular 2 caused upset by entirely moving away from AngularJS. However, just as Angular provides effective patterns for complex applications to follow, Angular’s upgrade module represents an admirable example of bridging code. Hybrid applications allow teams to develop new code in Angular while transitioning from and living alongside what has come before.
React’s compact and less opinionated approach means that teams are able to start pushing new patterns and approaches inside already complex pages. Web Components (and Angular elements) similarly seek to make things atomic enough they can bring encapsulated complexity wherever they are needed.
In all cases it is vital that the new code direction represents a genuine ideal in itself rather than a workable compromise. Front-end code is a notoriously easy place to add novel technical debt by poorly structured code or an absence of patterns, and effective modernization has to be focused upon a strong end state.
Conclusion
Modernization provides benefits to accelerate digital transformation. Changing the development and developer experience will accelerate delivery of key business needs and capabilities, and enable you to be ready to create and deliver new applications and services through adoption of modern practices.
Recommendations
Develop an architectural blueprint informed by your business strategy and best practices that will guide the organization and become a foundational document of architecture, patterns and development processes.
Consider adopting DevOps best practices to drive a culture of automation and transformation.
Deploy enterprise applications on cloud platforms to improve efficiency and automate operations.