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

Bee*_*eep 4 architecture asp.net-mvc

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

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

  • ID
  • 名字
  • 状态

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

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

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

Cra*_*ntz 9

我通常这样做,因为:

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