Boundaries and dependencies
Before we talk about different ways of enforcing architecture boundaries, let’s discuss where the boundaries lie within our architecture and what enforcing a boundary actually means.
Figure 12.1 – Enforcing architecture boundaries means enforcing that dependencies point in the right direction (dashed arrows mark dependencies that are not allowed according to our architecture)
Figure 12.1 shows how the elements of our Hexagonal Architecture might be distributed across four layers, resembling the generic Clean Architecture approach introduced in Chapter 3, Inverting Dependencies.
The innermost layer contains domain entities and domain services. The application layer around it may access those entities and services to implement a use case, usually through an application service. Adapters access those services through incoming ports or are being accessed by those services through outgoing ports. Finally, the configuration...