我有一些无状态服务和贫血领域对象在服务器端。服务器和客户端之间的模型是POCO DTO。客户端应该成为MVVM。该模型可能是大约20个不同类别的100个实例的图形。客户端编辑器包含各种选项卡页,它们全部与模型/视图模型实时连接。
我的问题是如何以良好的方式传播服务器往返后的更改。从ViewModel到DTO传播更改相当容易。对于回程,可以丢弃旧的DTO并用新的DTO整体替换它,但这将导致列表/DataTemplates的大量重绘。
我可以收集服务器端的更改并将其传输到客户端。但是更改名称将是特定于领域/DTO,而不是ViewModel特定的。映射对我来说似乎不太平凡。如果我应该在往返之后以命令方式执行它,则会破坏viewModels的SOC/可扩展性。
我正在考虑某种映射规则引擎,类似于automappper或emit mapper。但它只解决非常简单的用例。我不知道它如何映射/传播/转换添加项目到列表或删除。如何识别集合中的实例,以便将值合并到现有实例中。同时,它还应该传播验证/错误信息。
也许我应该在DTO上实现INotifyPropertyChanged,并尝试在其中重放服务器端事件?然后将ViewModel绑定到它?绑定是否可以很好地解决集合合并的问题?PRISM的EventAgregator对此有用吗?是否有任何事件记录回放组件?
是否有更好的客户端模式可用于具有服务器端逻辑的架构?
我的问题是如何以良好的方式传播服务器往返后的更改。从ViewModel到DTO传播更改相当容易。对于回程,可以丢弃旧的DTO并用新的DTO整体替换它,但这将导致列表/DataTemplates的大量重绘。
我可以收集服务器端的更改并将其传输到客户端。但是更改名称将是特定于领域/DTO,而不是ViewModel特定的。映射对我来说似乎不太平凡。如果我应该在往返之后以命令方式执行它,则会破坏viewModels的SOC/可扩展性。
我正在考虑某种映射规则引擎,类似于automappper或emit mapper。但它只解决非常简单的用例。我不知道它如何映射/传播/转换添加项目到列表或删除。如何识别集合中的实例,以便将值合并到现有实例中。同时,它还应该传播验证/错误信息。
也许我应该在DTO上实现INotifyPropertyChanged,并尝试在其中重放服务器端事件?然后将ViewModel绑定到它?绑定是否可以很好地解决集合合并的问题?PRISM的EventAgregator对此有用吗?是否有任何事件记录回放组件?
是否有更好的客户端模式可用于具有服务器端逻辑的架构?