当启动一个新的mvvm-wpf-application时,我通常一开始就包含mvvm-light。一切正常,直到我的应用程序增长为止。

沿线的某些地方ViewModelLocator变得很大(用于各种ChildViewodels的许多ViewModel)。甚至在兔子洞的更下方,我需要同一个 View 模型的多个不同实例。 (例如,要在同一屏幕上与之交互的项目列表)。这是斗争开始的地方,如何处理好代码并使其始终保持可测试性?

因此,如果我想摆脱ViewModelLocator(是否是antipattern吗?感觉就像是ServiceLocator),我应该转到ViewModel-first并为所有ViewModels创建(许多)抽象工厂吗?

最佳答案

ViewModelLocator是用于控制反转(IoC)的导航总线的奇特名称。尽管这似乎是一种较新的技术,但导航总线实际上以不同的方式使用服务总线。如果您有一个静态容器(在VB中共享),则它不是反模式。如果要在ViewModels中传递容器,则将使用反模式。

在MVVM中要记住的一点是,它是通用的设计模式,您可以通过多种方式对其进行扩展。大型项目的最佳解决方案是组件设计(一种设计,其中应用程序的每个功能都在其自己的 namespace 或项目中)。

设计图可能如下所示:

  • 客户
  • 模型
  • ViewModels
  • 服务
  • 订单
  • 模型
  • ViewModels
  • 服务

  • 等等...
    这实际上归结于开发人员的风格。只要您的设计是一致的。

    进一步阅读:
    为了更好地了解ViewModelLocator,请搜索导航总线
    为了更好地了解EventAggregator,请搜索 Message Bus

    关于mvvm - MvvmLight的标准ViewModelLocator是AntiPattern吗?以及如何减轻这种情况?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42185899/

    10-09 09:04