Domain-Driven Design can help focus development efforts into crafting a strong, expressive domain model. In Evans’ book, he dives in to a series of patterns which, when combined, form that strong domain model. These patterns include Entity, Value Object, Service, Factory, Repository, Aggregates and Roots. I think one of the biggest mistakes of someone learning and applying DDD is assuming that our entire model needs to fit into those few definitions. When you do so, you wind up in spots where you’re trying to use a Repository from inside an Entity, or violating other more basic OO design principles. When you’re feeling like you’re bending over backwards to fit everything into one paradigm, it’s time to stop, take a step back, and try a different angle. The GoF design patterns book introduced a lot more patterns than described in Evans’ book, and all are valid inside the domain. We shouldn’t artificially limit ourselves to the patterns in Evans’ book, as it was never meant to be an exhaustive domain patterns library. Many times, what looks like a DDD problem is just an OO problem hiding in plain sight. One example I’ve seen of a powerful OO design concept not explicitly called out is the Component...