我在模型中有一个对象,修改后需要大量其他对象根据这些更改重新计算值。
目前设置的方式是,这个对象只能在一个地方修改。这是一张带有取消和确定按钮的工作表。用户提交更改后,工作表会显示一个进度条并开始处理受更改影响的对象。工作表的显示和解除包装在NSUndoManager组中。用户可以在取消工作表后撤消一次通过中的所有更改。
困扰我的是,我一直认为这一切都应该发生在业务层面。而不是在控制器级别。即我应该能够在UI和代码中的任何地方修改我的业务对象,并让它触发必要的计算。
所以我会设置KVO来观察我的对象并在需要时触发长时间运行的操作。一旦我沿着那条路走下去,我就开始撞墙了。
如何合并更改?我的对象有几个属性。我不想在第一个属性发生变化时开始计算,第二个属性可能会在下一个变化。基本上我需要一个编辑表和一些控制点来同时提交所有更改。
如何为这个长时间运行的操作添加UI?我可以将一个NSOperationQueue附加到NSManagedObjectContext并让我的窗口控制器观察到它。当队列不为空时,我会弹出一张工作表,其中包含一个监控当前操作的进度条。
如何实施撤消/重做支持?如果我将重新计算延迟到事后运行的操作,我无法想象如何撤消初始更改并同时传播一次。我只能想象撤消原始更改并触发对所有其他对象的另一次重新评估。
简而言之:
此类依赖的最佳做法是什么?
传播是模型层还是控制层的工作?
答案 0 :(得分:0)
我相信我想出了一个解决方案: