【问题标题】:is this bad design? MVVM pattern w/ many commands on single class这是糟糕的设计吗? MVVM 模式在单个类上有许多命令
【发布时间】:2011-06-09 18:59:14
【问题描述】:

我见过微软有两种常见的命令实现。一,由Josh Smith here给出, 将命令放在视图模型类上。另一个,由Robert McCarter here 给出,可以通过静态类访问命令(因此我们可以使用 x:Static 对它们进行数据绑定)。 McCarter 的方法更多地依赖于单例和静态调用的使用,而不是我想冒险,所以目前我选择使用 Josh Smith 的方法。但是,我的“主”视图模型现在已经膨胀了至少 30 个命令,因为我在主窗口中有一个功能区控件。这是糟糕设计的标志,即缺乏关注点分离吗?或者这对于 MVVM 应用程序是否常见?单个视图模型似乎需要承担很多责任。

【问题讨论】:

    标签: wpf mvvm


    【解决方案1】:

    如果您在同一个 ViewModel 中有许多命令,我认为这并不重要。命令只是样板代码,它们并没有真正实现任何东西。但是,如果这些命令的实际实现在同一个 ViewModel 中,则可能会出现问题。您可能应该尝试将您的类分解为几个组件以应用单一职责原则。

    【讨论】:

      【解决方案2】:

      如果您有一个带有很多命令的功能区控件,您将需要一个将所有这些命令作为属性公开的类。它不一定是您的视图模型;例如,您可以创建一个功能区视图模型,然后从您的视图模型中公开它的一个实例。

      除非您的功能区上有不与视图模型互操作的命令,否则您无法在此处真正分离关注点。

      【讨论】:

        【解决方案3】:

        如果您担心 MainWindow ViewModel 上有许多命令并使用功能区,您可以尝试为您拥有的每个选项卡提供单独的 ViewModel。

        例如,在我目前正在开发的一个应用程序中,我将每个功能区选项卡分隔成一个单独的 UserControl(它扩展了 RibbonTabItem,因为我使用的是 Fleent 功能区)。这些视图在 ViewModel 上有它们的。实际上,这些 ViewModel 是使用 MEF(托管扩展框架)导入构造函数注入的依赖项,以及选项卡是使用其导入构造函数注入到 MainWindow 的依赖项。虽然这种方法可能是一种巨大的矫枉过正,但它具有一定的灵活性。请注意,从 MainWindow 本身引用某个选项卡上的命令不是问题,因为 MainWindow 的 ViewModel 可以将选项卡的 ViewModel 依赖项注入自身并公开它的一些命令;或者某些命令可以以特定 ViewModel 的形式出现,该 ViewModel 被注入到所有需要它的 ViewModel 中(后者可能更清洁......)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-09-06
          • 2011-08-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-31
          相关资源
          最近更新 更多