在ASP.NET MVC中使用View Model + Data Model来支持类型化视图?

时间:2009-07-15 19:03:54

标签: asp.net-mvc architecture

大多数开发人员在处理大型应用程序时如何处理ASP.NET MVC中的Typed Views?我们正在考虑将特定于View的模型放在Models文件夹中,然后将所有域对象放入一个单独的项目中。这样我们的控制器可以轻松地将域对象添加到类型化视图,而域对象不需要知道视图布局本身。

例如,如果我们有一个Employee对象:

  • Id
  • 名字
  • 姓氏
  • 状态

然后我们的员工视图可能会使用ViewEmployeeModel对象:

  • 员工对象
  • 列出填充状态下拉列表

这是一种明智的做法吗?有没有更好的方法来完成同样的事情?这看起来有点奇怪,因为我基本上有两个模型(一个用于视图,一个用于业务对象),但是它不比使用无类型视图更好吗?

4 个答案:

答案 0 :(得分:9)

我通常这样做,因为:

  1. 它允许您首先设计应用视图而不是DB-first,这在与客户代表合作时非常好。
  2. 视图通常比实体框架模型具有更“平坦”的对象图。 LINQ可以很容易地映射这些。
  3. 视图和数据模型可以更加独立地发展。
  4. 通常使用FK ID模拟绑定到平面视图模型比使用期望完全实现相关对象的实体模型更容易。
  5. 您无需担心意外泄露“秘密”属性或白名单属性以进行更新。

答案 1 :(得分:3)

没有评论的声誉,但克雷格是对的。它是Model-View-ViewModel模式的变体。 Los Techies上有一篇很好的文章。

该文章还使用了mgroves指出的AutoMapper代码,因此您应该能够一举两得。

答案 2 :(得分:1)

我认为这是一种非常明智的做法。可能对您有帮助的一件事是AutoMapper

答案 3 :(得分:1)

看起来很好,你的优点是模型只包含视图所需的信息,而不是很多讨厌的业务逻辑函数/值。