I've recently got the opportunity to work on a large enterprise-class system that needs to be deployed on multiple occasionally connected oil platforms and boats. Already the system's architecture was based on the Command Query Separation principles, this gave us a completely new challenge. After several months of looking at alternatives, we decided to go the Event Sourcing direction. In this in-depth session, I'd like you to learn the many alternatives we observed, the pros and cons, and the technical details of our final solution in which we use EventStore 3.0 and elements of NCQRS and Lokad.CQRS to synchronize systems over unreliable connections in a very efficient way.
Disadvantages
No concurrency; conflicting service requests are simply rejected
Staleness ignored;
Scalability limited;
No domain verbs; domain model does contain concepts from the domain model, just not the business actions
Granularity DTOs; What operations to expose in your WCF service? What relations to include and when? What domain entities to flatten.
Unneccesary DTO conversions; Conversions from/to domain model entities, traversing of relations, eager fatching
Conflicting demands; query demands denormalized schema, commands require normalized integer schema
Disadvantages
No concurrency; conflicting service requests are simply rejected
Staleness ignored;
Scalability limited;
No domain verbs; domain model does contain concepts from the domain model, just not the business actions
Granularity DTOs; What operations to expose in your WCF service? What relations to include and when? What domain entities to flatten.
Unneccesary DTO conversions; Conversions from/to domain model entities, traversing of relations, eager fatching
Conflicting demands; query demands denormalized schema, commands require normalized integer schema
Disadvantages
No concurrency; conflicting service requests are simply rejected
Staleness ignored;
Scalability limited;
No domain verbs; domain model does contain concepts from the domain model, just not the business actions
Granularity DTOs; What operations to expose in your WCF service? What relations to include and when? What domain entities to flatten.
Unneccesary DTO conversions; Conversions from/to domain model entities, traversing of relations, eager fatching
Conflicting demands; query demands denormalized schema, commands require normalized integer schema
Disadvantages
No concurrency; conflicting service requests are simply rejected
Staleness ignored;
Scalability limited;
No domain verbs; domain model does contain concepts from the domain model, just not the business actions
Granularity DTOs; What operations to expose in your WCF service? What relations to include and when? What domain entities to flatten.
Unneccesary DTO conversions; Conversions from/to domain model entities, traversing of relations, eager fatching
Conflicting demands; query demands denormalized schema, commands require normalized integer schema
Disadvantages
No concurrency; conflicting service requests are simply rejected
Staleness ignored;
Scalability limited;
No domain verbs; domain model does contain concepts from the domain model, just not the business actions
Granularity DTOs; What operations to expose in your WCF service? What relations to include and when? What domain entities to flatten.
Unneccesary DTO conversions; Conversions from/to domain model entities, traversing of relations, eager fatching
Conflicting demands; query demands denormalized schema, commands require normalized integer schema
Disadvantages
No concurrency; conflicting service requests are simply rejected
Staleness ignored;
Scalability limited;
No domain verbs; domain model does contain concepts from the domain model, just not the business actions
Granularity DTOs; What operations to expose in your WCF service? What relations to include and when? What domain entities to flatten.
Unneccesary DTO conversions; Conversions from/to domain model entities, traversing of relations, eager fatching
Conflicting demands; query demands denormalized schema, commands require normalized integer schema
Disadvantages
No concurrency; conflicting service requests are simply rejected
Staleness ignored;
Scalability limited;
No domain verbs; domain model does contain concepts from the domain model, just not the business actions
Granularity DTOs; What operations to expose in your WCF service? What relations to include and when? What domain entities to flatten.
Unneccesary DTO conversions; Conversions from/to domain model entities, traversing of relations, eager fatching
Conflicting demands; query demands denormalized schema, commands require normalized integer schema