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

4
大多数开发人员在处理ASP.NET MVC中的Typed Views时,如何处理大型应用程序?我们考虑将View-specific models放置在Models文件夹中,然后将所有域对象放置在一个单独的项目中。这样,我们的Controllers可以轻松地将域对象添加到Typed View中,而无需域对象本身了解View布局。
例如,如果我们有一个具有以下内容的Employee对象:
Id
FirstName LastName Status
那么我们的Employee View可能会使用一个ViewEmployeeModel对象,其中包含:
Employee object
List to populate Status drop-down
等等
这种方法是否合理?是否有更好的方法来实现同样的事情?这似乎有点奇怪,因为我基本上有两个模型(一个用于视图,一个用于业务对象),但是这不是比使用未打印的视图更好吗?
4个回答

9

我几乎总是这样做,因为:

  1. 这让你可以先从视图设计应用程序,而不是从数据库开始,当与客户代表合作时非常好。
  2. 视图通常比实体框架模型具有更"扁平"的对象图。LINQ使其易于映射。
  3. 视图和数据模型可以更独立地演进。
  4. 使用带有FK ID的扁平视图模型进行建模绑定通常比期望完全实例化相关对象的实体模型更容易。
  5. 您不必担心意外公开"秘密"属性或为更新白名单属性。

3

虽然我没有足够的声望来发表评论,但是Craig是正确的。这是一种Model-View-ViewModel模式的变体。在Los Techies上有一篇好的文章可以阅读。

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


1

我认为这是一个相当明智的方法。可能有助于您的一件事是AutoMapper


1

看起来不错,你有一个优势,即模型只包含视图需要的信息,而没有许多烦人的业务逻辑函数/值。


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