Model-View-ViewModel(MVVM)模式的优势是否值得开销?

时间:2011-04-12 01:04:20

标签: silverlight mvvm

问题在主题中说明:Model-View-ViewModel(MVVM)模式的优势是否值得开销?

在许多情况下,实现视图模型涉及重复模型属性以及有时模型和ViewModel数据成员之间的同步的相当大的开销。例如,目前在Silverlight 4& WCF RIA,View Models未生成(如果开发人员遵循MVVM模式,则由他来创建视图模型,通常在ViewModel上复制相应的Model属性,这些属性没有任何重要意义,但将Model称为存储)。

为什么不扩展Model类,提供额外的属性以使其易于被View使用?

4 个答案:

答案 0 :(得分:2)

  

为什么不扩展Model类,提供额外的属性以使其更容易被View使用?

实际上这就是PresentationModel的用途。哪个MVVM强烈基于。区别在于ViewModel是视图的模型,而不是数据的模型。因此,您更关心视图对数据的行为。

如果你有一个简单的用户界面,它所做的一切都是模型,那么我建议在ViewModel的属性上公开Model并绑定到它。尽管模型确实实现了INotifyPropertyChanged等等。

ViewModel的强大之处在于您可以响应用户操作。然后,ViewModel可以支持命令,调用服务和验证,从而将模型保留为数据容器

答案 1 :(得分:2)

  

为什么不扩展Model类,提供额外的属性以使其更容易被View使用?

在简单的情况下,这就是ViewModel正在做的事情 - 将模型包装起来,以便以View的消费方式进行扩展。如果您的模型可以直接绑定,欢迎您这样做。

话虽如此,ViewModel层还有更多内容,而不仅仅是包装模型 - 这也是应用程序特定逻辑(即应用程序的管道)将发生的地方。有些东西必须正确地从Model类中提出请求,并将逻辑组合在一起。

答案 2 :(得分:0)

如果您担心额外的工作,您可以随时创建一个ViewModelBase(INotifyPropertyChanged,错误/验证,通用的东西),由ViewModel继承,它会最大限度地减少您认为可能花费时间复制的内容。而且,Silverlight / Wpf为我们提供了大大减少编码的绑定,此外XAML还通过标记提供功能来实现这一点。除此之外,您还可以使用屏幕,控制器等进一步设计。

对我来说,我没有看到任何关于使用MVVM的“开销”;如果有,那就值得了。它恰当地处理了关注点分离。它提供了一个良好的开发平台,特别是在人们可以处理应用程序的不同方面而不影响其他团队成员代码(尤其是开发人员和设计人员之间)的团队中。

希望这有帮助

答案 3 :(得分:0)

MVVM的好处

  1. 降低了复杂性。
  2. 设计与开发的隔离。
  3. 依赖注入。
  4. 主要优势是当您拥有一个Well MVVM结构化Windows Phone应用程序并希望为Windows Metro桌面开发相同时,您只需要专注于设计,因为可以使用相同的视图模型。
  5. 希望它有所帮助。