- Use Domain-Driven Design to collaborate among all project disciplines and clearly understand the business requirements.
- Establish a Ubiquitous Language to discuss domain related concepts.
- Use Bounded Contexts to break down complex domains into manageable parts.
- Use Command-Query Separation to simplify your designs and improve performance.
- Implement a Layered Architecture to focus on different aspects of the application.
- Eric Evans, Domain-Driven Design – The original work describing a vision and approach for dealing with highly complex domains.
- Vaughn Vernon, Implementing Domain-Driven Design – A detailed look at implementing systems using DDD - highly recommended.
- Abel Avram & Floyd Marinescu, Domain-Driven Design Quickly - an online book introducing the fundamentals of DDD.
- Bertrand Meyer, Command-Query Separation - an approach to simplify designs and improve performance by separating reads from writes
- Greg Young, Unshackle Your Domain – An excellent presentation describing the benefits of separating commands from queries and event driven design
- Greg Young, Command-Query Responsibility Segregation – this approach takes CQS a step further by creating two separate end-points for reads and writes
- Udi Dahan, Clarified CQRS – another nice article clarifying the CQRS pattern
- Martin Fowler, Anemic Domain Model – good argument against objects without behavior