gpt4 book ai didi

wpf - 当前的 MVVM View 模型是否违反了单一职责原则?

转载 作者:行者123 更新时间:2023-12-03 12:44:53 28 4
gpt4 key购买 nike

根据当前的实践(至少使用 WPF 和 Silverlight),我们看到通过 View 模型中的命令绑定(bind)绑定(bind)的 View ,或者我们至少看到在 View 模型中处理的 View 事件。这似乎违反了 SRP因为 View 模型不仅对 View 状态建模,而且对 View (用户)做出响应。别人问过how to build view models without violating SRP或问 whether their implementations do so (最后一个是 MVC 中的 Controller ,但大致类似)。
那么当前的做法是否违反了 SRP?还是“ View 模型”真的是不违反 SRP 的东西的集合?为了稍微解释一下,似乎我们需要知道什么是单一职责,或者如果概念中有多个职责,是否将个人职责拆分出来,符合 SRP。我不知道。
Wikipedia's definition View 模型 说

[T]he ViewModel is a “Model of the View” meaning it is an abstraction of the View that also serves in data binding between the View and the Model


这对于 SRP 来说似乎已经足够好了,但后来的条目说(我强调了)

[The ViewModel] acts as a data binder/converter that changes Model information into View information and passes commands from the View into the Model


Prism blog post关于 View 模型的作用,作者说(再次强调)

What it boils down is that the view model is a composite of the following:

  • an abstraction of the view
  • commands
  • value converters
  • view state

我确定我错过了许多定义,但它们似乎属于以下类别:
  • 建模 View 状态的单一“模糊”责任(那么我们该怎么做
    按州表示)
  • 多重职责(查看状态、用户交互(即
    命令))
  • 单个特定职责的组合(抽象、
    状态、交互、转换),因此只有一个
    责任:“管理所有这些东西”。

  • 如果您好奇,我会“关心”这一点,因为(2)感觉不错,但似乎与流行的实现背道而驰。

    最佳答案

    单一职责为 Martin defines it :

    "THERE SHOULD NEVER BE MORE THAN ONE REASON FOR A CLASS TO CHANGE."



    就 MVVM 而言,ViewModel 实际上只是 Presentation Model 的特殊实现。 .

    因此,虽然可以说 演示模型 应该只代表 UI 的状态,而 演示者/ Controller 应该始终在 UI 和 Presentation Model 之间代理命令。如果有人遵循这个想法,使用 SRP 按状态和命令划分 ,那么添加命令不应该影响表示状态的类。因此 MVVM 会破坏 SRP。

    然而...

    我认为这是在捕获稻草。 MVVM 是一个相当专业的实现,主要用于 WPF/Silverlight ( and now browser clients)。

    模式旨在使设计更简单,替代方案会更麻烦或更不易维护 .由于 MVVM 旨在利用表示技术极其丰富的数据绑定(bind)功能,因此这是一个值得权衡的选择。

    关于wpf - 当前的 MVVM View 模型是否违反了单一职责原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7164412/

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