Monday, March 21, 2022

2022-03-21 Monday - Book Review: Designing Hexagonal Architecture with Java


(image source:

Designing Hexagonal Architecture with Java

An architect’s guide to building maintainable and change-tolerant applications with Java and Quarkus

Pages: 460
Publication Date: 2022-01-07

Author: Davi Vieria




My Review on Amazon:

Review Title:

An In-Depth and Detailed Exploration of Hexagonal Architecture Concepts

Review Summary:

If I had to pick just two words to describe this excellent book on Hexagonal Architecture with Java – it would be “Depth & Detail”.

What I particularly liked:

The writing is crisp and succinct.

Good weaving of foundational principles of Hexagonal Architecture, from Alistair Cockburn – with additional insights from others.

The obvious care and attention that the author has given in considering the many concerns and dimensions of teaching and illustrating Hexagonal Architecture concepts.

The inclusion of a “Summary”, Questions”, and sometimes a “Further Reading” section - at the end of the chapters.

The careful and meticulous layering of information, from chapter to chapter – slowly building up a conceptual model in the reader’s mind – backed by the numerous concrete , non-trivial, hands-on examples, with illustrative code.

The complete treatment from a real-world engineering perspective – from design to development, testing, and deployment. The author leverages numerous libraries and tools (Swagger, RESTEasy, Quarkus, JPMS, Hibernate Reactive, Panache, MySQL, Vert.x, Docker, Kubernetes)– beyond just the Java language – weaving some important concepts and techniques (Business Model Canvas, Lean Canvas, Event Storming, Domain Driven Design, Bounded Context, Behavior-Driven Development, CI/CD, OpenAPI, REST APIs, Use Cases, Dependency Inversion, CDI Beans, ORM, Cloud Deployment) – that will elevate the skills and expertise of less experienced developers.

A detailed coverage of all aspects of Hexagonal Architecture considerations.

Chapter-1’s discussion of the considerations to be aware of when  using  UUIDs to define an entity’s Identity – to isolate the business code from the technology dependency.

Chapter-2’s practical (and just enough) hands-on code examples – to illustrate the concepts covered.

Chapter-3’s coverage of Cucumber and Behavior Driven Design (BDD)

Chapter-4’s coverage of Adapters – with concrete examples – with illustrating diagrams.

Chapter-5’s exploration of the distinctions between Driving and Driven.

Chapter-6’s use of a telco company application design as a unifying theme for the chapter.

Chapter-8’s tying together the Domain, Application, and Framework aspect of a Hexagon Architecture.

Chapter-9’s practical example of the Dependency Inversion Principle (DIP).

Chapter-10’s introduction of the Quarkus framework.

Chapter-11’s coverage of Quarkus DI.

Chapter-12’s coverage of RESTEasy Reactive – and the use of the OpenAPI Specification (OAS). Noteworthy: Quarkus comes with built-in support for the OpenAPI v3 specification.

Chapter-13’s notable use of Hibernate Reactive – and its relationship to Quarkus, as well as the practical example of how to create a reactive output adapter to persist data - with MySQL as an example.

Chapter-14’s illustrative coverage of using Docker and Kubernetes for cloud deployments.

Chapter-15’s inclusion of Domain Driven Design concepts.

This book is very suitable for software engineers, system architects, solution architects, and enterprise architects – that have an interest in learning about Hexagonal Architecture. It is also quite readable by less technical IT folks.


What could be improved in the next edition:

Chapter-1 would benefit by having a diagram to visually illustrate the Driven and Driver concepts.

The diagram in Chapter-3, “Figure 3.3 – Ports and the Application hexagon”, would be an excellent diagram to introduce in Chapter-1 – as a context-setting diagram – providing the reader with a good visual overview of Hexagonal Architecture.

Table of Contents:

Section 1: Architecture Fundamentals

1 - Why Hexagonal Architecture?

2 - Wrapping Business Rules inside Domain Hexagon

3 - Handling Behavior with Ports and Use Cases

4 - Creating Adapters to Interact with the Outside World

5 - Exploring the Nature of Driving and Driven Operations


Section 2: Using Hexagons to Create a Solid Foundation

6 - Building the Domain Hexagon

7 - Building the Application Hexagon

8 - Building the Framework Hexagon

9 - Applying Dependency Inversion with Java Modules


Section 3: Becoming Cloud-Native

10 - Adding Quarkus to a Modularized Hexagonal Application

11 - Leveraging CDI Beans to Manage Ports and Use Cases

12 - Using RESTEasy Reactive to Implement Input Adapters

13 - Persisting Data with Output Adapters and Hibernate Reactive

14 - Setting Up Dockerfile and Kubernetes Objects for Cloud Deployment

15 - Good Design Practices for Your Hexagonal Application


Other Books You May Enjoy


© 2001-2021 International Technology Ventures, Inc., All Rights Reserved.