我在服务器端有无状态服务和贫血域对象。服务器和客户端之间的模型是 POCO DTO。客户端应该成为 MVVM。该模型可以是 20 个不同类的大约 100 个实例的图。客户端编辑器包含各种标签页,它们都实时连接到模型/视图模型。
我的问题是如何在服务器往返后传播更改的好方法。将更改从 ViewModel 传播到 DTO 非常容易。回到过去,可以扔掉旧的 DTO 并用新的 DTO 替换它,但这会导致列表/数据模板的大量重绘。
我可以收集服务器端的更改并将它们传输到客户端。但是更改的字段名称将特定于域/DTO,而不是特定于 ViewModel。映射对我来说似乎很重要。如果我应该在往返后以命令的方式执行此操作,它将破坏视图模型的 SOC/模块化。
我正在考虑某种映射规则引擎,例如 automappper 或 emit mapper。但它只解决了非常简单的用例。我看不到它将如何映射/传播/转换将项目添加到列表或删除。如何识别集合中的实例,以便将值合并到现有实例。它还应该传播验证/错误信息。
也许我应该在 DTO 上实现 INotifyPropertyChanged 并尝试在其上重放服务器端事件?然后将 ViewModel 绑定到它?绑定会解决集合合并的问题吗?PRISM 的 EventAgregator 对此有用吗?是否有任何事件记录重播组件?
具有服务器端逻辑的架构是否有更好的客户端模式?