【问题标题】:MVVM ViewModels SingletonMVVM ViewModels 单例
【发布时间】:2011-02-15 16:01:02
【问题描述】:

如果您不需要每个屏幕的多个实例,那么将所有视图模型设为单例是错误的做法吗?

【问题讨论】:

    标签: .net wpf design-patterns mvvm


    【解决方案1】:

    是的,因为singletons are evil。

    您可能会遇到虚拟机保持状态的问题,该状态可能与您的数据库不同步并导致过多的内存消耗。 由于状态被持久化,单元测试将变得更加困难。

    【讨论】:

    • 我的偏好是编写一个 ViewModel 单例,它提供主要的 ViewModel 对象,View 可以根据需要轻松地从中检索所有其他 ViewModel 对象。通常这个主 ViewModel 对象提供命令实现,因此 View 可以支持打开文档 ........msdn.microsoft.com/en-us/magazine/ff798279.aspx ,任何 cmets?
    • 那篇文章的文档管理器适配器部分?
    • 我会看一些关于 Prism 或 Caliburn 的文章,并使用 Unity 等控制反转框架为您解析和实例化视图模型。 msdn.microsoft.com/en-us/magazine/cc785479.aspx
    • @Tom,不是所有的控制反转框架都至少有一个单例 - 你刚刚说所有单例都是 eval
    • :) 更多情况下,singletons are acceptable 的情况很少,您应该始终尝试寻找替代方法。就 DI 而言,它是关于如何管理对容器的访问。您应该在应用程序的最高入口点创建和设置容器,并使用它将依赖项注入到其下方的对象中,因此没有直接使用 DI 容器。
    【解决方案2】:

    单身人士:

    • 让测试更难
    • 如果您确实需要多个问题,以后再给您问题
    • 很难控制它们的创建位置

    所以只有在你有非常好的理由时才使用单例模式——“因为你可以”不是一个好的理由。

    【讨论】:

      【解决方案3】:

      是的。

      首先,您可能会将自己置于任何可扩展性的角落,这取决于单例实现。其次,参考到处都是静态单例的设计可能不会很干净。第三,单元测试要么很困难,要么无法复制实际的类使用,或者两者兼而有之。第四,单例是否为您解决了任何设计问题?如果您只是想节省资源,那我就忘了它。

      【讨论】:

        猜你喜欢
        • 2012-09-02
        • 2015-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-17
        • 2012-12-16
        相关资源
        最近更新 更多