在基于MVVM的应用程序中管理分层对象状态的最佳方法/方法是什么?

时间:2013-10-15 17:06:24

标签: c# .net wpf mvvm

我在GUI上工作并处理复杂的对象,即对象有其他对象,而这些对象可能有其他对象。

这些对象(通常几乎同时)被各种视图,视图模型,服务,nhibernate操作(你可以命名) - 用简单的东西来做,比如save / update / delete / validate等等。

在大多数情况下,像NotifyPropertyChanged这样的东西就足够了,但并非总是如此。有时我决定调用EventAggregator但是当对象图很大时特别是这些对象的集合 - 它变得如此混乱我不断失去目的并且不确定特定对象的确切状态并且通常不确定是否那仍然是同一个对象或它的一些松散副本;

所以我的问题是管理对象状态以及避免“状态爆炸”的最佳方法/方法是什么?

2 个答案:

答案 0 :(得分:2)

通过引入额外的结构简化。最好的方法是为应用程序提供更多结构。将应用程序划分为较小的内部生活部分,您可以对其进行监督和控制。让这些部分隐藏在facade / adapter类型后面,这些类型只显示系统那部分的简化视图。只要有必要,就递归重复。使用正式模型来定义结构和相互通信规则,例如UML 2.0分层状态机通常很合适......我知道,这只是一个通用的工程设计,但它可以帮助......

答案 1 :(得分:1)

我建议您通过Robert C. MartinMicah Martin记下一本书Agile Principles, Patterns, and Practices in C#,这里有很多很好的例子,其中展示了如何通过UML设计系统和其他类似的方法。具体来说,它显示了为什么你应该重构你的代码,可以存储在抽象类中,什么不是。您可以立即看到咖啡机Mark IV的示例,在那里他开发了一个真正独立的界面。

根据我的感受,MVVM的主要原则是数据与其表示的独立性。我喜欢尝试制作单独的模块,这些模块实现了单独的逻辑,而不了解数据。例如,SQL模块,SMTP模块等,它只包含一些方法,如ConnectToDb()SendEmail(),主要逻辑在ViewModel,她将这些工作模块与数据模型结合起来

在设计系统之前绘制图表很有用,但也不介入。最重要的是要看到论文中的主要部分,其他人会理解它以及知道(或建筑师)。