ViewModel and Singleton Pattern



我有一个用于枚举处理的ViewModel(实体框架中的几个实体)。

1) 从哲学上讲,对这个ViewModel使用SINGLETON模式是一个好的做法吗?因为它在所有应用程序中都很普遍,而且在很多地方都有使用。

2) ViewModel(和相关的ObjectContext)活很长时间不是问题吗?

谢谢!

这可能应该分为两个单独的问题,但我将尝试两个问题:

  1. 没有。ViewModel没有理由是Singleton。实际上,您想要的是多个实例(因为每个实例都会有所不同),而不是为运行应用程序而存在的单个实例。仅仅因为一个对象广泛且频繁使用,并不能使其成为单例的好候选者。。。它只是意味着它是一个好物体。

  2. ViewModels的生存期不应该很长(这也是您不想要singleton的另一个原因)。在MVVM中,给定ViewModel的寿命将是用户打开窗口并完成更改的时间。

在特定情况下,拥有单例ViewModel是完全有效的。我使用过多次的一个例子是SettingsViewModel。需要由应用程序中的多个系统全局访问。我的设置模型在创建时从文件加载设置,ViewModel允许我绑定以修改这些设置。singleton允许我在需要的地方全局访问这些设置,而不是将它们作为参数传递。

在这种情况下完全有效。

1)不要这样做。请参阅MVVM ViewModels Singleton2) 我认为将视图模型与对象上下文相耦合不是一个好主意。它应该只是一个视图模型,为视图提供数据;但不与任何数据持久性技术紧密耦合。相反,注入处理这一问题的服务,这样您就可以嘲笑它们。

只有垃圾收集器认为有必要时,对象才会存在于堆栈中。从哲学上讲,不,使用Singleton不是一个好主意,因为它破坏了封装。参见文章:Singleton反模式

正如Justin所提到的,您似乎不太可能需要ViewModels来遵循Singleton模式。但是,正如您所提到的,视图模型在整个系统中使用。考虑将通用功能拉入基类(如果您喜欢继承)和/或将可重用组件拉入对象以利用组合。

开始这项工作的一个简单方法是Josh Smith的ViewModelBase的所有行,以及典型的ViewModel对INotifyPropertyChanged的使用。

请在此处查看该代码:http://mvvmfoundation.codeplex.com/

最新更新