【问题标题】:Using same Model for MVVM and MVC对 MVVM 和 MVC 使用相同的模型
【发布时间】:2012-08-13 14:20:55
【问题描述】:

我有一个关于 MVVM 和 MVC 的问题。我正在开发一个桌面客户端和 Web 应用程序。我打算使用 WPF(和 MVVM)开发桌面客户端和 Web 应用程序的 ASP.Net MVC。

我以前从未使用过 ASP.Net MVC,尽管我从来没有真正喜欢过 Web 表单(母版页、输出缓存等一些功能除外),而且我主要使用 AJAX (jQuery) 和处理程序来填充 HTML 和处理输入(我认为我在阅读了有关该模式的内容后接近 MVC,但方式不同)。

现在这些应用程序将大多具有相同的输入、报告和数据库。我计划创建可以在 MVVM 和 MVC 中重复使用的模型。但是在阅读了关于这些模式的各种文章,以及对 ASP.Net MVC 代码的分析之后,我怀疑它是否可以做到。在 MVVM 中,View 永远不知道 Model,而在 MVC 中,Controller 与 View 共享 Model。此外,在 ASP.Net MVC 中,视图(ASPX 文件)是从 System.Web.Mvc.ViewPage 派生的,而标签/标题是从模型本身填充的。

有没有一种方法可以让两个应用程序使用相同的模型?

谢谢。

Ritesh

【问题讨论】:

  • “在 MVVM 中,视图永远不知道模型”不。不正确。视图与模型绑定。
  • @Will:不。如 Darin 所述,它绑定到 VM。
  • @Will - 在 MVVM 中,我们不直接将控件与模型绑定。 ViewModel 中有用于绑定的桥接属性。
  • @Ritesh:不幸的是,这种错误的信念可能会花费你一些编码时间。
  • @jgauffin: :|如果您的模型旨在支持这一点,那么您没有理由不能绑定到模型。如果没有,您可以使用自定义类型描述符来弥补差距。见鬼,你甚至可以通过 T4 模板为它们自动生成代码。为什么要包装每个模型以将其隐藏在视图中?这是浪费时间。

标签: asp.net-mvc model-view-controller mvvm


【解决方案1】:

在 MVVM 中,View 永远不知道 Model,而在 MVC 中,Controller 与 View 共享 Model。

不太对。在 MVVM 中,视图绑定到视图模型。与 ASP.NET MVC 中的完全相同。在 ASP.NET MVC 中,控制器不与视图共享模型。它共享一个视图模型。它与模型对话,然后构建一个传递给视图的视图模型。

与 MVVM 中的 MVC 不同,View 可以与 Model 对话,但这会在整个 View Model 中间接发生,因此 View 和 Model 都不知道彼此的存在。

因此,您可以在桌面客户端应用程序和 Web 应用程序中使用相同的模型。唯一的区别是视图模型。

【讨论】:

  • 谢谢。这是 VS2010 中由 ASP.Net MVC 模板创建的 LogOnModel 类的示例属性。 [Required] [DataType(DataType.Password)] [DisplayName("Password")] public string Password { get; set; } 这些属性似乎只适用于 ASP.Net MVC。我是否也应该为 MVVM 保留这些属性?
  • LogOnModel 不是模特。它是视图模型,因为正如我在正确编写的 MVC 应用程序中的回答中所述,您永远不会将模型传递给视图。你只传递视图模型。模型不应包含任何特定于视图的属性,例如 DisplayName。因此,创建一个干净的可重用模型,然后为 MVC 和桌面应用程序定义视图模型。
猜你喜欢
  • 1970-01-01
  • 2023-04-03
  • 2014-04-21
  • 1970-01-01
  • 2016-05-15
  • 2023-03-28
  • 2014-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多