我目前处于一种情况,即我正在替换应用程序的域层,但必须保留现有的MVVM UI。我们肯定想要一个活动商店,但我正在努力解决当前CQRS实施的某些方面。
我们有一些复杂的聚合,包含多个实体集合和键/值对动态属性。我们现有的UI有一个用于此聚合的大型编辑屏幕,我不知道如何构建更新命令。
可能的解决方案:
1)只需在ViewModel中获取聚合,对域模型执行更新,然后使用命令(var command = new SaveAggregateCommand(myAggregate);
)发送。如果通过序列化边界(没有自定义序列化)传送内部事件,内部事件将不会被保留,这会感觉不对。
2)创建一个复杂的命令对象,其中包含列表更新的属性以及每个集合类型的已添加,更新和删除的子实体的单独列表。这对于命令处理程序来说是最容易使用的,但感觉非常草率。
3)创建许多命令,这些命令基本上反映了被捕获的域模型的事件(在我的场景中最多可以有38个)。然后,视图模型必须保留在用户按下保存按钮时提交的未提交命令的列表。就像#2一样,这也让人觉得很讨厌。
由于这个聚合的(必要的)复杂性,这些解决方案都没有一个感觉正确。我会对这个有一些指导。
答案 0 :(得分:0)
所以,答案是:我做错了。这些命令被分解为更易于管理和具体的部分,农民们欢欣鼓舞。