MVVM还是MVC?想要为WPF和ASP.NET使用相同的类集


10

就设计模式而言,我是新手。当我听到新的嗡嗡声MVVM时,我才开始学习MVC。

我想通过重新设计为客户开发的旧库存和开发票应用程序来学习这两者的见解。我想同时编写一个基于Windows的WPF应用程序和一个基于Web的版本。如果可能,我想使用相同的类集,如果没有,那么至少要稍加修改。

我读了几篇文章,但是我没有遵循那里讨论的.NET 3.5和4的体系结构和高级概念。我只想设计我实际项目中真正需要的东西,就一步一步地前进。

是否有关于MVVM的简单分步参考?MVVM是MVC的超集还是子集?对于我的应用程序的Windows和Web版本,哪种模式是现代的,应该选择哪种模式?

有些类几乎不需要与View连接。在那种情况下,以MVVM方式设计相同的类将被证明是一项额外的工作。

Answers:


10

是否有关于MVVM的简单分步参考?

就在这里。看看这里。

MVVM是MVC的超集还是子集?

MVVM属于MVC家族,因此,如果可以说完全是它的一个子集。这是将UI与下面的业务逻辑分离的一种变体。我将其描述为MVC的同级产品。从OOP的早期开始,人们一直在寻找将UI与逻辑分离的方法。MVC是第一个进化的原型。这很简单,尽管大多数人都做错了。该视图只是模型的观察者,并在需要时调用它。控制器只是视图与模型进行通信的一种策略,例如,当您需要可交换行为时(例如,ReadonlyController,AdminController)。MVC非常成功,应用它确实是一个好习惯。

MVVM是一种特殊的MVP模式,如Martin Fowler所述。MVP尝试使视图尽可能地哑(同时仍接受用户输入等),从而增强可测试性。它旨在抽象化视图和要放在演示者中的交互逻辑。演示者仅与模型/业务逻辑进行通信并更新视图。Martin Fowler在其Presentation Model Pattern中非常描述了MVVM。

该视图完全抽象为ViewModel。当View需要属性时,也ViewModel需要它。它(ViewModel)旨在完全独立于底层UI技术(一种抽象)。为了在View和ViewModel之间进行通信,需要使用同步模式(即Observer)。这在无状态的Web环境中不容易实现。MVVM与MVP不同,因为View不再绑定到模型/业务逻辑,而是绑定到ViewModel。

对于我的应用程序的Windows和Web版本,哪种模式是现代的,应该选择哪种模式?

表示模型(类似于MVVM)在理论上应完全独立于所使用的UI技术。但是,同步化方面需要涵盖。通过使用WPF绑定到“命令和属性”(已存在同步胶),可以轻松完成此操作。使用ASP.NET,情况就不同了。但是,在CodeProject上有一篇文章,其将Presentation Model Pattern与所有Windows UI技术一起使用。看一看。


4

由于生命周期问题以及需要在页面帖子之间保持状态,您会发现很难在Web和WPF之间重用100%的无UI代码。Asp.net没有MVVM所需的强大数据绑定,而且由于人们期望UI无需回发即可更新自身,因此这些天很多逻辑也需要在jscript中运行。

如果您可以使用SilverLight,那么您的生活将变得简单得多:-)

同样,您可以在WPF应用中托管Web浏览器以获取UI的常用功能吗?


SilverLight可以带来什么好处?
RPK

1
@ PRK,Silverlight几乎可以让您完成WPF的所有工作,并且如果您可以让所有“网络”用户安装它,还可以创建一个可通过网络访问并像Web应用程序一样“感觉”的解决方案。
伊恩,

4

您打算针对基于ASP.Net和WPF的UI使用相同的类不是很实际。Web上的数据绑定和javascript的使用与WPF有很大不同。我唯一能想到的选择是具有完全被动视图的MVP。从理论上讲,您可以具有填充Web和WPF页面的同一演示者。
在实践中,我将开发一种架构,其中大多数业务规则位于Web服务层和两个不同的表示层中,并且与该Web服务进行通信的业务规则越少越好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.