首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVVM标准化

MVVM标准化
EN

Stack Overflow用户
提问于 2010-02-07 16:43:48
回答 1查看 928关注 0票数 11

银灯贴中有人认为MVVM目前缺乏标准化,所以每个人都有自己的口味。

这就是为什么我和一些来自WPF纪律的人正在积极讨论每个人都同意的MVVM的哪些元素。我完全理解我们以不同的方式实现了这个模式,我们混合了几种模式,或者根据我们项目的需要创建了我们自己的模式,或者让开发人员的生活变得更容易。但是,忘记那些困难或你的项目的特殊需要。让我们讨论大家都同意的MVVM模式的标准规则。我也发了我在这里的一些想法

为什么是MVVM?

  • 测试能力( ViewModel比代码隐藏或事件驱动代码更容易进行单元测试)
  • UX设计器与开发人员之间的清晰划分
  • 增加视图的“可合并性”
  • 模型永远不需要更改以支持对视图的更改。
  • 很少需要更改ViewModel以支持对视图的更改。
  • 没有要更新视图的重复代码

Do和Don in View

  • 不应该包含任何您想要测试的逻辑:正如Glenn所说的,MVVM不是代码计数练习,我们可以用代码隐藏来编写代码。但是你不应该写任何你想要测试的逻辑。例如:如果用户选择一个国家,那么您希望在视图中显示州或城市的列表。这是业务需求,所以您应该有单元测试来测试这个逻辑。所以,你不应该用代码隐藏来写它。
  • 可以是控件或数据模板。
  • 保持视图尽可能简单。:我们仍然可以在XAML中使用数据触发器或值转换器或Visual或混合Behivor。
  • 如果某些东西不可绑定,请使用附加属性:

Do和Don in ViewModel

  • 视图与模型的连接
  • 保持视图状态和值转换(您可以创建希望在ViewModel中显示的数据结构,而不是使用ValueConverter。例如:您需要显示名称,而不是名字和姓氏。您的模型可以有名字和姓,但是您可以在ViewModel中创建Name属性。)
  • 无强或弱(通过接口)视图引用
  • 使VM尽可能可测试(例如不调用Singleton类)
  • VM中没有与控件相关的内容(因为如果要更改视图,那么也必须更改VM。)

模型

  • 可以是数据模型、DTO、POCO、域类的自动生成代理和UI模型,这都是基于您希望如何实现域服务和表示层的分离的。
  • 没有提及ViewModel

你对此有什么建议或意见吗?

我们小组有一个分歧。有些人说,在ViewModel中拥有视图的接口是可以的。但也有人说,如果视图模型有视图的接口,那么它将是MVP模式。

我们的一位MVVM专家谈到了MVVM与MVP的关系

View => ViewModel

  • 视图直接绑定到ViewModel,并通过绑定与VM对话。
  • 在MVP中,视图绑定到挂在SupervisingController上的模型,或者根本不绑定(被动视图)。

ViewModel =>视图

MVVM

  1. INPC /属性绑定
  2. 事件
  3. 消息(事件聚合器/Messenger/RX框架)
  4. 通过中介(如服务)
  5. 通过一个接口
  6. 通过委托(View将委托传递给VM,它可以用来调用它)。例如,VM可能公开视图调用的传递它的SetActions方法。

MVP

在MVP的情况下,标准是演示者通过接口、数据绑定或被动视图中的属性返回视图。对于被动视图,属性不是使用数据绑定,而是使用视图属性getter和setter直接设置控件值。

你觉得这个主意怎么样?

你认为ViewModel有视图界面可以吗?

如果您想添加更多内容,欢迎您添加.:)

关于这篇文章的全部想法是要对社区中的MVVM模式有相同的理解。

EN

回答 1

Stack Overflow用户

发布于 2012-11-08 00:53:25

我认为通过绑定在视图ViewModel之间的通信使MVVM成为了它自己的模式,而不是其他关注点的分离。对于vm来说,通过接口了解视图并不是好是坏,但在通信所使用的模式的上下文中,它不是MVVM。

遗憾的是,获得和维护标准的一些困难在于WPF和Silverlight的缺点和复杂性。然而,当有多个有效的标准时,我会戴上我的Martin帽子,并添加一个“何时使用它”部分。

您的标准是否涵盖跨部门的问题,如本地化?

我喜欢你写的内容,很高兴你把它贴在这里.

干杯,

贝瑞尔

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2217404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档