2009-08-17 29 views
5

我开发了一些基于MVVM的WPF代码,需要进行一些小的重构,但在此之前我需要确定最佳体系结构。MVVM模式和半全局数据

我最初是从一个应用程序开始的,该应用程序可以提供我的数据的几个类似(但是独立的)表示。我们称之为RecordsViewModel,它有相应的RecordsView。随着时间的推移,我引入了一个SettingsViewModel,它被传递到RecordsViewModel的构造函数中并且可见地发布(允许RecordsView使用它)。 SettingsViewModel已注册,以便更改反映在我的所有视图中。

现在我想拆分RecordsView一点,因为它现在包含两个不同的视图。

我的问题是:

  • 新(RecordsMainViewRecordsAlternativeView)都希望看到的设置。
  • 不像早先的RecordsView这是编程实例化,这些新的视图是从Xaml(默认构造函数)实例化。

所以我的选择似乎是:

  1. 走在树模型向上找到一个设置
  2. 家长进行设置上的控件DependencyProperty,使XAML中加入属性的实例。
  3. 使SettingsViewModel单身。

其他更好的选择?你认为哪个最好?

回答

3

我会将您的设置逻辑转换为服务(ISettingsService),并使用服务定位器或依赖项注入从任何视图模型所需的服务获取该服务。

服务非常适合管理共享状态,服务定位器/ DI使您的VM非常容易获得对该服务的引用。在虚拟机中存储共享状态有点不顺利,正如你发现的那样 - 并没有真正扩展。一个好的经验法则可能是问问自己,虚拟机中的状态是否仅用于支持相应的视图,或者其他组件是否需要访问该状态。如果是后者,将其转变为服务。