有没有比使用MVVM的静态类或单例更好的方法?

sir*_*lot 6 c# wpf mvvm

我发现在很多情况下,似乎(至少表面上看)在我的WPF-MVVM应用程序中使用Singletons或Static类用于模型是有意义的.大多数情况下,这是因为我的大多数模型都需要在整个应用程序中访问.制作我的模型static是一种满足这一要求的简单方法.

但是,我之间的冲突是因为地球上的每个人似乎都讨厌单身人士.所以我想知道我没有更好的方法,或者我做的事情显然是错的?

Moo*_*ice 5

单身人士有几个问题.我将在下面概述它们,然后提出一些替代解决方案.我不是一个"永远不会使用单身人士,或者你是一个垃圾编码器"的人,因为我相信他们确实有自己的用途.但这些用途很少见.

  1. 线程安全.如果你有一个全局静态的Singleton,那么它必须是线程安全的,因为任何东西都可以随时访问它.这是额外的开销.

  2. Singletons的单元测试更加困难.

  3. 它是全局变量的廉价替代品(我的意思是,这就是单身人士在一天结束时的情况,尽管它可能有方法和其他奇特的东西).

看,并不是单身人士本身就是"可怕的可憎之物",而是它是许多新程序员要处理的第一个设计模式,它的"便利性"模糊了它的"陷阱"(只需在其上加上一些齿轮,称之为"蒸汽朋克") ).

在您的情况下,您指的是模型,它们总是"实例",因为它们自然地反映了数据.也许您担心获得这些实例的成本.相信我,它们应该是微不足道的(显然是数据访问设计).

那么,替代方案?将模型传递到需要它的位置.这使得单元测试更容易,并允许您以心跳方式更换该模型的基础知识.这也意味着您可能希望查看接口 - 这些表示合同.然后,您可以创建实现这些接口的具体对象,并且您可以轻松地对代码进行单元测试和修改.

在单身世界中,对该单例的单一更改可能从根本上破坏代码库中的所有内容.不是一件好事.