按照CQRS模式,是否允许在命令中添加复杂类型?(参见下面示例中的"Address"-class )
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
}在我看来我会说是的..。但我想我见过其他人说你不能这么做。
发布于 2019-02-12 16:01:47
简而言之,我认为应该这样做,除非有人对此有充分的理由。
让我们这样看待它:我们有一个用户注册,他注册了他的三个附件,并点击保存按钮触发我们在服务器端的命令。很好,我们的应用程序现在将创建分成两个命令,一个命令保存另一个人,然后链接他们。
现在,在保存了我们的附件之后,我们的应用程序崩溃了(因为一些无关的原因),哦,不!我们现在有三个附件保存在我们的数据库,但没有用户。恭喜,我们的数据库现在以死数据为特色!
发布于 2019-02-12 18:30:16
按照CQRS模式,是否允许在命令中添加复杂类型?
是。
它变得非常复杂的地方:尝试修改存储在不同地方的类型。
因此,例如,如果您要在“用户存储库”中存储对用户的更改,以及对“地址存储库”中的地址的更改,并且您没有某种程度的保证存储库将被同一事务控制,那么您将开始遇到一致性问题。
https://stackoverflow.com/questions/54653782
复制相似问题