比较3层模式和MVVM

我不知道MVVM。 我总是遵循3层模式,其中一层是UI,另一层是业务层,最后一层是数据访问层。

在这一层,我们将请求从UI发送到业务层,业务层与数据访问层交互。 在这种模式下一切顺利然后我的问题为什么要学习MVVM。 MVVM的优点是什么? 有什么东西可以用MVVP做很少的努力。 请详细讨论。 谢谢。

与我之前写的ppl相反 – MVVM模式不是将UI层分成3层,而是将UI层分成另外两层 – View和ViewModel。

因此,如果我们有DAL,BLL和UI,现在我们有Model(DAL&BLL)和ViewModel + View(而不仅仅是一个图层UI)。

它仍然是3层但是编排的方式不同(如果你真的想到它 – DAL从来就不是真正的层 – 它最多是一个辅助类,所以前面提到的3层实际上只有2层,现在变成了3层MVVM)。

原因

如果你考虑一下,你会发现在3层架构中,通常UI与表示代码和应用程​​序逻辑代码混合在一起。 这违反了SRP(单一责任原则)并且由于几个原因而不好。 在MVVM中,UI层分为两层。 ViewModel负责应用程序逻辑,View负责演示。

这可以让你有三个非常重要的事情:

  1. 更好的代码可维护性

  2. 更容易使用VS设计师和Blend。 又名Blendability 。 (这可以说是MVVM最强大的特性。它确实提高了生产力)

  3. 允许使用自动化测试来测试ViewModel,而到目前为止我们必须测试UI本身,并且在UI上进行自动化测试很复杂。 这称为可测试性

在个人笔记上; 多年来我一直在写n层架构。 我在一年多前开始练习MVVM。 在某些时候这可能是一次艰难的旅程,但是男人,这真的值得付出努力。

MVVM用于构建UI层。 它是一种模式,可以在业务对象和UI框架之间实现非常好的交互。 您不必更改3层模式。 MVVM处于另一个抽象级别。
在这里,您可以找到一个介绍MVVM的非常好的video,并且可能会回答很多问题。

MVVM本身可以说是一个三层架构。 这些层都存在于同一个应用程序中。

“3层”有时也指n层架构 ,它更多地是将UI,服务层和数据层分离到不同的服务器上。 如果你有这种分层,那么MVVM将不会取代它。 它只会增加UI层,将其拆分为自己的三层。

这是MVVM的一篇文章,它通过MVP和MVVM展示了经典MVC之间的一些关系:

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

另见我对这个问题的回答 。 它解释了在MVC上使用MVVM而不是旧版本的一些原因。

MVVM与WPF,Silverlight / Moonlight和Windows Phone 7特别相关,因为它利用了这些框架中内置的强大数据绑定function。