mbu*_*bue 5 c# domain-driven-design cqrs
我的CQRS应用程序有一些复杂的域对象.创建它们时,实体的所有属性都由用户直接指定,因此
CreateFooCommand有大约15个属性.
因此,FooCreatedEvent也有15个属性,因为我需要读取端的所有实体属性.
由于必须将命令参数分派给域对象,并且不应将FooCreatedCommand传递给域,
有一个从CreateFooCommand到域的手动映射.
由于域应该创建域事件,
这是从域Foo属性到FooCreatedEvent的另一个映射.
在读取方面,我使用DTO来表示Foo的结构,因为它存储在我的读模型中.
因此,更新读取端的事件处理程序引入了从事件参数到DTO的另一个映射.
为了实现一个简单的商业案例,我们有
我想要摆脱命令/事件参数并推送DTO对象,但这意味着域可以接收或创建DTO并将其分配给事件.
序列:
REST Controller --Command+DTO--> Command Handler --DTO--> Domain --(Event+DTO)--> Event Handler
Run Code Online (Sandbox Code Playgroud)
关于使CQRS减少实施痛苦的任何想法?
我看到以下选项:
创建一个不可变DTO类FooDetails所使用的两个CreateFooCommand并FooCreatedEvent通过在构造其注入; 类型提示聚合方法反对FooDetails;例如new CreateFooCommand(new FooDetails(prop1, prop2, ...))
创建一个不可变的基类FooDetails,该基类由CreateFooCommand和FooCreatedEvent和 类型 提示聚合方法针对FooDetails
彻底改变风格,使用cqrs.nu提倡的风格,直接向聚合发送命令;聚合具有命令方法,例如FooAggregate::handle(CreateFooCommand command);我个人经常使用这种风格。