在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
}
我认为是...但是我想我已经看到其他人说您不允许这样做。
答案 0 :(得分:1)
简而言之,我相信应该如此,除非有人对此有很好的论点。
让我们这样看:我们有一个用户注册,他注册了他的三个地址,然后单击保存按钮在服务器端触发我们的命令。太好了,我们的应用程序现在将创建内容分为两个命令,一个保存地址,另一个保存实际的人并将其链接。
现在,保存我们的地址后,我们的应用程序崩溃(出于某些不相关的原因),哦,不!现在,我们在数据库中保存了三个地址,但没有用户。恭喜,我们的数据库现在具有死数据!
答案 1 :(得分:1)
在CQRS模式之后,是否可以在命令内添加复杂类型?
是的
真正复杂的地方:尝试修改存储在不同位置的类型。
因此,例如,如果您要在“用户存储库”中存储对用户的更改,而在“地址存储库”中存储对地址的更改,那么您将无法保证存储库将由同一事务控制,那么您将开始遇到一致性问题。