We've seen how structural patterns allow us to compose new objects from existing objects. This allows us to encapsulate functional within these new objects to make more abstract objects. These more abstract objects are easier to decouple the composing objects away from the rest of the system to make changes to them or the rest of the system easier to realize.
ORM Frameworks allow us to make the database more abstract. We've seen how using an ORM can make integration of the database easier, more flexible, and more decoupled. Having a more abstract data-access implementation makes a more cohesive application by making sure the nuances of a particular database brand are unlikely to influence the design and the semantics of our software system.
In the next chapter, we'll review the importance of unit-testing. We'll discuss how writing automated tests before, during, and after refactoring helps us understand the requirements imposed on our software system. It will also allow us to verify...