Over the course of last few days I received a lot of feedback on the IDDD sample for Aggregates with Event Sourcing (ES) published. I tried to address some questions either by replying or by adding more documentation to the actual project (which resulted in commits like this one).
However, there still is a set of questions that can't be addressed within that specific sample - this will overload sample and hijack the original intent of showing how a single aggregate works with event sourcing.
As it seems, the missing guidance currently includes following topics:
- Added: High-level overview of DDD/ES architecture (a la Lokad) and building blocks in various deployment configurations. Overview of available case studies; influence by DDD and Event Sourcing.
- Added: Reality vs Domain Model vs Implementation; capturing domain model via coding exercise and evolving it towards deeper insight; features of good domain models.
- Added: Detailed overview of building blocks that can be used for DDD/ES architecture; how to model, design, test and maintain each block individually and as a part of bounded context:
- Application Services
- Aggregates with Event Sourcing
- View Projections
- Event Ports
- Dealing with remote services (or integration points) that can fail, timeout or require case-by-case automated performance adjustment (e.g. throttling);
- Inter-aggregate relations, sources of truth, eventual consistency and compensating actions;
- Capturing long-running business processes in a way that both matches Domain-driven Design (DDD) and is generally simpler to deal with in practice than sagas;
- Integrating multiple bounded contexts together (e.g. when you need to share some information between);
- Added: Developing Clients UIs: composition of UI and data, eventual consistency and task-based UIs, specifics of targeting multiple platforms (Web, Desktop clients, mobile apps), authorization;
- Maintenance, debugging, release and failure management of systems implemented with DDD+ES approach;
- Addressing specific scalability and performance requirements; cloud deployments.
- Added: Multi-tenancy, tenant-specific customizations and processing. Deployments and maintenance of multi-tenant systems.
- Added: Building occasionally-connected systems. Concurrent editing, conflict resolution strategies and merging. Feedback to user.
- Added: Migrating legacy systems to DDD/ES architecture; PROs and CONs; justifying risks and costs.
- Added: Appendix for .NET developers:
- Structuring Visual Studio Solutions
- Developing ASP.NET MVC Web applications
- Windows Azure practices for DDD/ES systems
- Helpful tools and frameworks
Does this list of topics cover all black spots, or are there any other areas that need some coverage?