gpt4 book ai didi

c# - CQRS:类冗余并将 DTO 传递给域

转载 作者:太空狗 更新时间:2023-10-29 23:12:38 25 4
gpt4 key购买 nike

我的 CQRS 应用程序有一些复杂的域对象。当它们被创建时,实体的所有属性都是由用户直接指定的,所以

CreateFooCommand 有大约 15 个属性。

FooCreatedEvent 因此也有 15 个属性,因为我需要读取端的所有实体属性。

由于必须将命令参数分派(dispatch)给域对象,并且不应将 FooCreatedCommand 传递给域,

有一个从 CreateFooCommand 到域的手动映射。

由于域应该创建域事件,

这是从域 Foo 属性到 FooCreatedEvent 的另一个映射。

在读取方面,我使用 DTO 来表示 Foo 的结构,因为它存储在我的读取模型中。

因此事件处理程序更新读取端引入了另一个从事件参数到 DTO 的映射。

为了实现一个简单的业务案例,我们有

  • 两个冗余类
  • 三个基本相同属性的映射

我想摆脱命令/事件参数并插入 DTO 对象,但这意味着域可以接收或创建 DTO 并将其分配给事件。

顺序:

REST Controller --Command+DTO--> Command Handler --DTO--> Domain --(Event+DTO)--> Event Handler

关于减少 CQRS 实现痛苦的任何想法?

最佳答案

我看到以下选项:

  1. 创建一个不可变的 DTO 类 FooDetails,通过将其注入(inject)到构造函数中,CreateFooCommandFooCreatedEvent 使用它;类型提示针对 FooDetails 的聚合方法;例如 new CreateFooCommand(new FooDetails(prop1, prop2, ...))

  2. 创建一个由 CreateFooCommandFooCreatedEvent 继承的不可 rebase 类 FooDetails 并类型提示聚合方法 FooDetails

  3. 完全改变样式并使用 cqrs.nu 推广的样式其中命令直接发送到聚合体;聚合具有命令方法,例如 FooAggregate::handle(CreateFooCommand command);我个人经常使用这种风格。

关于c# - CQRS:类冗余并将 DTO 传递给域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46169721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com