在MVVM和MVC之间共享模型?

4

我目前正在处理一个具有标准解耦结构的项目,如下所示:

仓库 -> 服务 -> 视图模型 -> 视图

仓库和服务层使用POCO对象。视图模型是从这些对象构建的,并调用服务方法,然后传递给视图。

我有两个前端项目,一个使用MVC3的Web应用程序,另一个使用WPF的桌面应用程序。 大多数视图模型都包含在一个独立的类库中,因为它们对两个应用程序都是相同的。(有一些例外情况,但是这些通过为每个项目使用特定的VM进行处理)

目前,我已经完成了基础工作并使MVC方面全部运行。现在我正在查看WPF方面,并考虑使用MVVM Light Toolkit。

我的问题是:鉴于视图模型在MVC和WPF应用程序之间共享,MVVM Light Toolkit(或任何其他工具包)是否合适?是否有某些原因不应该将MVVM Light Toolkit与MVC3一起使用?

我搜索了很长时间,但没有找到确定的答案。感谢您提供的想法。

1个回答

5
我的看法是,你无法成功地在MVVM和MVC之间共享ViewModels。尽管它们被称为相同的东西,但它们非常适合特定的实现。例如,在为WPF编写VM时,您需要实现命令、依赖于双向绑定等等,而这些对于MVC来说都不相关。MVVM Light帮助您使用WPF/SL实现MVVM,但对于MVC来说完全不相关。
我和你面临类似的情况,只不过我的Web项目是标准的Webforms而不是MVC。我在我的.Web和.Desktop项目之间共享.Business和.Model项目引用,但每个项目显然都会对业务(如果使用服务)层的结果进行自己的处理。我对WPF非常陌生,如果我的评估有误,希望有人纠正我。

谢谢提供信息。经过进一步了解MVVM工具包,我必须说你可能是对的。它看起来真正针对的是基于WPF或Silverlight的应用程序。我认为它不会在MVC3中真正有意义。 - Steve
1
我将其标记为正确是因为在MVC3和WPF应用程序之间共享相同的viewmodel是不可行的。然而,我的做法是使用一个类库来保存视图模型及其所有属性和验证。这些是MVC3使用的视图模型。然后,我扩展每个视图模型以添加所有命令等。这些是WPF使用的视图模型。这使得我的代码保持DRY,具有所有相关好处,而不是在两个地方定义相同的属性、验证等内容。 - Steve
你能详细说明一下你的方法吗?我面临着类似的情况,我想在MVC网站中重用我的数据层(POCO类),同时通过MVVM为Win8和WindowsPhone公开它们。你是在底层的POCO中添加inotifychanged内容吗?还是在需要的MVVM阶段后期注入它们? - SelAromDotNet
很抱歉,在我的上一条评论之后不久,我放弃了这个项目中MVC3方面的工作,专注于厚客户端。实际上,我认为我尝试做的越多,它就变得越困难。最终,我采取的方法对我来说并不起作用,所以我不得不要么重复很多工作和维护,要么只选择其中一个。 - Steve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接