Book Image

Designing Hexagonal Architecture with Java - Second Edition

By : Davi Vieira
Book Image

Designing Hexagonal Architecture with Java - Second Edition

By: Davi Vieira

Overview of this book

We live in a fast-evolving world with new technologies emerging every day, where enterprises are constantly changing in an unending quest to be more profitable. So, the question arises — how to develop software capable of handling a high level of unpredictability. With this question in mind, this book explores how the hexagonal architecture can help build robust, change-tolerable, maintainable, and cloud-native applications that can meet the needs of enterprises seeking to increase their profits while dealing with uncertainties. This book starts by uncovering the secrets of the 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 with ports and use cases in the application hexagon, and make your software compatible with different technologies by employing adapters in the framework hexagon. In this new edition, you’ll learn about the differences between a hexagonal and layered architecture and how to apply SOLID principles while developing a hexagonal system based on a real-world scenario. Finally, you’ll get to grips with using Quarkus to turn your hexagonal application into a cloud-native system. By the end of this book, you’ll be able to develop robust, flexible, and maintainable systems that will stand the test of time.
Table of Contents (24 chapters)
1
Part 1: Architecture Fundamentals
7
Part 2: Using Hexagons to Create a Solid Foundation
12
Part 3: Becoming Cloud-Native
18
Part 4: Hexagonal Architecture and Beyond

Preface

Sometimes, solving problems and expressing our ideas through code is challenging. What looks like an obvious solution in our minds may look unnecessarily complex in the minds of others. But that’s alright if we are open to new ideas and perspectives because we set our minds to learning unexpected things when we have a persistent attitude and a willingness to embrace everything that comes.

I was not expecting it when I was first introduced to hexagonal architecture.

I remember working in a company where most of the software was developed by consultants. Those folks would come, deliver their code, and leave. Although my team and I tried to establish specific standards to ensure consistency in the applications we were responsible for, the harsh reality was that we needed more knowledge to maintain our applications properly. Given the number of systems and the different approaches and architectures employed to build them, it took a lot of work to maintain and add new features to such systems. That’s when a teammate told me about the hexagonal architecture and how it could help us tackle hard-to-maintain software problems.

At that time, there weren’t many books covering the hexagonal architecture. Most of the resources were scattered on the internet through video courses and articles explaining how someone implemented hexagonal architecture. The lack of resources was a considerable obstacle, but using an architecture that could improve software maintainability was very attractive to me. So, I kept researching and experimenting in my own job with the ideas, which would ultimately lead to me writing the first edition of this book.

I am fortunate to have had the opportunity to write the first, and now the second, edition of a book dealing with such a fascinating topic as hexagonal architecture. The second edition has allowed me to employ hexagonal architecture ideas with more recent versions of Java and Quarkus. This edition preserves the fundamentals from the previous one while exploring modern Java’s new and cool features. Also, this edition explores how hexagonal architecture can be used with the acclaimed SOLID principles and how it relates to the widely used layered architecture.

Concepts such as ports, adapters, and use cases are combined with Domain-Driven Design (DDD) elements such as entities and value objects to provide an in-depth guide explaining how to assemble those concepts to untangle the exciting puzzle of designing highly change-tolerable applications with hexagonal architecture. Considering the contemporary cloud-native practices that dictate most enterprise development today, we deep dive into Quarkus to learn how to blend hexagonal architecture ideas with cloud-native development, which enables us to create enterprise-grade hexagonal applications ready to be deployed in any major cloud provider.

So, I encourage you to have a persistent attitude and a willingness to embrace everything that comes and embark with me on this fascinating journey to explore hexagonal architecture.