gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:18:05 24 4
gpt4 key购买 nike

我发现在很多情况下,似乎(至少表面上)在我的 WPF-MVVM 应用程序中为模型使用单例或静态类是有意义的。这主要是因为我的大部分模型都需要在整个应用程序中访问。使我的模型静态是满足此要求的一种简单方法。

然而,我很矛盾,因为这个星球上的每个人似乎都讨厌单例。所以我想知道我是否没有更好的方法,或者我是否在做一些明显错误的事情?

最佳答案

单例有几个问题。我将在下面概述它们,然后提出一些替代解决方案。我不是那种“永远不要使用单例,否则你就是个垃圾编码员”的人,因为我相信它们确实有它们的用途。但这些用途很少见。

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

  2. 使用单例进行单元测试更加困难。

  3. 它是全局变量的廉价替代品(我的意思是,这就是一天结束时的单例,尽管它可能有方法和其他花哨的东西)。

看,这并不是说 Singleton 本身是“可怕的可憎之物”,而是它是许多新程序员开始处理的第一个设计模式,它的便利掩盖了它的陷阱(只需在上面贴上一些齿轮并称它为 Steam 朋克)。

在您的情况下,您指的是模型,它们始终是“实例”,因为它们自然地反射(reflect)了数据。也许您担心获取这些实例的成本。相信我,它们应该可以忽略不计(显然是数据访问设计)。

那么,替代品?将模型传递到需要它的地方。这使单元测试更容易,并允许您立即更换该模型的基础知识。这也意味着你可能想看看接口(interface)——这些表示一个契约。然后,您可以创建实现这些接口(interface)的具体对象,瞧 - 您的代码很容易进行单元测试和修改。

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

关于c# - 有没有比为 MVVM 使用静态类或单例更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16925451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com