我们有一组域对象,可以在一个窗口中进行编辑,并在其他窗口中同时使用。确保对象始终处于有效状态,并且在提交之前外部世界不会看到更改。对象存储在存储库中(每个对象都有唯一的ID)。
我可以想到一些解决方案,但我对其中任何一个都不满意:
请注意,只有一个并发编辑器,但可能有多个并发“读者”。此外,并发性不会成为问题(在多线程环境中,部分更新的对象)。
在提交更改之前,我们如何实现用于编辑域对象的模式而不应用更改?有没有我应该研究的框架?
答案 0 :(得分:3)
我认为Command pattern可以帮助你。{ 您基本上将实现“编辑”窗口以不直接处理对象,而是创建根据UI中的数据更改对象的命令。单击“应用”后,您可以在对象上执行这些命令,使其进入用户选择的状态。
另一种方法是给Edit和Run窗口各自提供自己的实例,并在用户单击Apply后“以某种方式”同步“运行”窗口中的对象。但是,我不太确定如何在不引入大量耦合的情况下实现这一点。
第三种方法是我要实施的方法:
在使用MVVM时,编辑窗口和运行窗口都有自己的 ViewModel 实例。 ViewModel可以包含域对象的实例。两个ViewModel都会将一个实例保存到域对象的相同实例中
现在,ViewModel可以通过以下方式实现: