【问题标题】:Why two Models should not talk to each othetr为什么两个模型不应该互相交谈
【发布时间】:2010-11-04 09:37:38
【问题描述】:

嗯,在 MVVM 模式中,两个模型不应该相互认识或交谈是一种很好的做法。这意味着您不应该在另一个模型中创建一个模型的对象,然后注册事件或执行类似的事情。

但是,为什么,如果两个模型彼此认识有什么问题。我正在编写代码,如果我的两个模型彼此认识会发生什么。

【问题讨论】:

  • 我认为这不利于松耦合!

标签: wpf silverlight mvvm prism


【解决方案1】:

如果您打算以任何方式规避 MVVM,您希望有充分的理由(否则您不妨将其编写为传统的代码隐藏并节省一些输入):)

使用 MVVM 有几个好处,主要与非常松散的耦合、单元测试和重用有关。

松耦合的基本原理是这样的:

  • View 知道如何显示特定形状的数据,但不知道数据的来源。
  • ViewModel 提供特定形状的数据和设置,视图可以使用,但不知道是谁在显示它。
  • 模型知道如何保存通用数据,但不知道谁在使用它
  • 控制器(大多数 MVVM 解释中缺少)决定要获取哪些数据、要显示哪些数据以及在哪里显示。这是决策的归属。

如果您要求您的 ViewModel 相互了解,那么您很可能缺少一个 Controller 对象来管理您的 2 个 ViewModel 和关联的 Model/View。

如果您能提供更多关于您的模型当前为何链接的信息,我或许可以提出替代方案。

【讨论】:

    【解决方案2】:

    视图模型之间的互操作通常非常合适。毕竟,视图中的父/子关系涉及父视图模型持有一组子视图模型。在许多情况下,例如,父视图中命令的可用性取决于其子视图的状态。有时将其委托给单独的控制器类是合适的,但通常也不值得为此付出努力。

    这实际上取决于您的应用程序的整体复杂性。有时这种努力是必不可少的。有时它只是镀金。

    【讨论】:

    • 当然可以,但是一旦你不完全分离对象,你就不能自动化测试它们(这首先是 MVVM 的主要原因)。干杯
    • 一个视图模型如何与另一个视图模型互操作导致其中一个无法测试?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    相关资源
    最近更新 更多