Book Image

Get Your Hands Dirty on Clean Architecture

By : Tom Hombergs
Book Image

Get Your Hands Dirty on Clean Architecture

By: Tom Hombergs

Overview of this book

Building for maintainability is key to keeping development costs low and processes easy. The second edition of Get Your Hands Dirty on Clean Architecture is here to equip you with the essential skills and knowledge to build maintainable software. With this comprehensive guide, you’ll explore the drawbacks of conventional layered architecture and the advantages of domain-centric styles such as Robert C. Martin's Clean Architecture and Alistair Cockburn's Hexagonal Architecture. Then, you’ll dive into hands-on explanations on how to convert hexagonal architecture into actual code. You'll learn in detail about different mapping strategies between the layers of hexagonal architecture and discover how to assemble the architectural elements into an application. Additionally, you’ll understand how to enforce architecture boundaries, which shortcuts produce what types of technical debt, and how, sometimes, it is a good idea to willingly take on those debts. By the end of this second edition, you'll be armed with a deep understanding of the hexagonal architecture style and be ready to create maintainable web applications that save money and time.
Table of Contents (13 chapters)

Implementing a Use Case

Let's finally look at how we can manifest the architecture we have discussed in actual code.

Since the application, web, and persistence layers are so loosely coupled in our architecture, we are totally free to model our domain code as we see fit. We can do DDD, we can implement a rich or an anemic domain model, or we can invent our own way of doing things.

This chapter describes an opinionated way of implementing use cases within the hexagonal architecture style that we have introduced in the previous chapters.

As is fitting for a domain-centric architecture, we will start with a domain entity and then build a use case around it.

Implementing the Domain Model

We want to implement the use case of sending money from one account to another. One way to model this in object-oriented fashion is to create an Account entity that allows us to withdraw and deposit money so that we can withdraw money from the source account and deposit it into the target...