Assembling the Application
Now that we have implemented some use cases, web adapters, and persistence adapters, we need to assemble them into a working application. As discussed in Chapter 3, Organizing Code, we rely on a dependency injection mechanism to instantiate our classes and wire them together at startup. In this chapter, we will discuss some approaches for how we can do this with plain Java and the Spring and Spring Boot frameworks.
Why Even Care about Assembly?
Why aren't we just instantiating the use cases and adapters when and where we need them? Because we want to keep the code dependencies pointing in the right direction. Remember: all dependencies should point inward, toward the domain code of our application, so that the domain code doesn't have to change when something in the outer layers changes.
If a use case needs to call a persistence adapter and just instantiates it itself, we have created a code dependency in the wrong direction. This is...