Book Image

Designing Hexagonal Architecture with Java

By : Davi Vieira
Book Image

Designing Hexagonal Architecture with Java

By: Davi Vieira

Overview of this book

Hexagonal architecture enhances developers' productivity by decoupling business code from technology code, making the software more change-tolerant, and allowing it to evolve and incorporate new technologies without the need for significant refactoring. By adhering to hexagonal principles, you can structure your software in a way that reduces the effort required to understand and maintain the code. This book starts with an in-depth analysis of hexagonal architecture's building blocks, such as entities, use cases, ports, and adapters. You'll learn how to assemble business code in the Domain hexagon, create features by using ports and use cases in the Application hexagon, and make your software compatible with different technologies by employing adapters in the Framework hexagon. Moving on, you'll get your hands dirty developing a system based on a real-world scenario applying all the hexagonal architecture's building blocks. By creating a hexagonal system, you'll also understand how you can use Java modules to reinforce dependency inversion and ensure the isolation of each hexagon in the architecture. Finally, you'll get to grips with using Quarkus to turn your hexagonal application into a cloud-native system. By the end of this hexagonal architecture book, you'll be able to bring order and sanity to the development of complex and long-lasting applications.
Table of Contents (21 chapters)
1
Section 1: Architecture Fundamentals
7
Section 2: Using Hexagons to Create a Solid Foundation
12
Section 3: Becoming Cloud-Native

Summary

On top of the Domain hexagon, we built the Application hexagon with use cases and ports. For use cases, we heavily relied on the behavior-driven development tool called Cucumber. With Cucumber, we could express the use cases supported by the system not only in code terms but also in written words.

We started by creating Cucumber feature files containing the use case written descriptions and then used them as a reference to create use case interfaces. These interfaces were then implemented by input ports that provided a concrete way to achieve use case goals. Finally, we built use case tests, based again on the written description provided by Cucumber.

By implementing and testing the Application hexagon in this way, we leveraged the special capabilities of Cucumber to express the system's behavior in a declarative and straightforward form, and we used these same capabilities to implement and test the entire Application hexagon.

On top of the Application hexagon...