CQRS-复杂类型

时间:2019-02-12 15:44:02

标签: c# cqrs complextype

在CQRS模式之后,是否允许在命令内添加复杂类型? (请参见下面的示例中的“地址”类)

public interface ICommand{}

public class RegisterNewUser: ICommand{
    public string FirstName {get;set;}
    public string LastName {get;set;}
    public List<Address> Addresses {get;set;}
}

public class Address{
    public string Street {get;set;}
    public string City {get;set;}
}

public class RegisterNewUserHandler: ICommandHandler<RegisterNewUser>{
    //Do some stuff
}

我认为是...但是我想我已经看到其他人说您不允许这样做。

2 个答案:

答案 0 :(得分:1)

简而言之,我相信应该如此,除非有人对此有很好的论点。

让我们这样看:我们有一个用户注册,他注册了他的三个地址,然后单击保存按钮在服务器端触发我们的命令。太好了,我们的应用程序现在将创建内容分为两个命令,一个保存地址,另一个保存实际的人并将其链接。

现在,保存我们的地址后,我们的应用程序崩溃(出于某些不相关的原因),哦,不!现在,我们在数据库中保存了三个地址,但没有用户。恭喜,我们的数据库现在具有死数据!

答案 1 :(得分:1)

  

在CQRS模式之后,是否可以在命令内添加复杂类型?

是的

真正复杂的地方:尝试修改存储在不同位置的类型。

因此,例如,如果您要在“用户存储库”中存储对用户的更改,而在“地址存储库”中存储对地址的更改,那么您将无法保证存储库将由同一事务控制,那么您将开始遇到一致性问题。