c# - 有没有比通过 ASP.NET MVC 中的 ViewModel 使用多个模型更好的方法?

标签 c# asp.net-mvc viewmodel

我是 ASP.NET MVC 2 的新手,也是我关注的示例之一 is the official ASP.NET MVC Music Store在 codeplex 上。

在示例项目中,他们有这样的场景:共有三种模型:AlbumsArtistsGenres

让我怀疑的是他们处理 View 的方式,例如,当他们想要编辑专辑时,需要从数据库中获取所有艺术家和流派的列表,因此他们制作了一个名为 的 ViewModel StoreManagerViewModel:

public class StoreManagerViewModel{
  public Album Album{get;set;}
  public List<Artists> Artists{get;set;}
  public List<Genre> Genres{get;set;}
}

此 ViewModel 被传递到 View ,并允许智能感知并在 View 中查看多个模型。

这个方法似乎会让我为模型中的几乎每个关系创建一个额外的类: 如果我有一个 Discography 类并且我想将 Artists 与 Discography 相关联,我将不得不像上面那样制作另一个 ViewModel。

但是,我不喜欢在 Album 方法中有两个属性:

public List<Artists> Artists{get;set;}
public List<Genre> Genres{get;set;}

除了 ViewModels 之外,还有更好的方法吗?有更清洁的方法吗?

最佳答案

到目前为止,此页面上的所有其他答案都遗漏了 View 模型的一个重要概念,即它将数据层与表示层分开,并消除了 View 构建可能会破坏您的数据库的查询的能力.它不仅仅是关于智能感知和将多个模型发送到 View ,尽管这些是其他优点。

例如,您想要在您的网站上加载名称以 myNamePrefix 开头的前 100 名堆栈溢出用户。然后,对于每个用户,您要显示他们拥有超过 10 个赞成票的标签列表。您可以只将一个Users 列表传递给您的 View ,然后调用.Tags 属性,然后它会往返于db 为您的 100 个用户中的每一个。当数据库与 Web 服务器位于同一台机器上并且您每天只获得几次点击时,这可能没问题。但是假设您正在尝试每秒为 myNamePrefix 的各种值提供此数据。您可能会找到一些创造性的方法来缓存结果,但在大多数情况下,最好用它需要的所有数据填充您的 View 模型(在本例中通过单个查询),然后让 View 吐出结果。请记住, View 的工作是显示数据,而不是获取数据。

关于c# - 有没有比通过 ASP.NET MVC 中的 ViewModel 使用多个模型更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4816500/

相关文章:

wpf - 是否可以将 DataTemplate 应用到页面?

mvvm - 使用 ViewModel 代替 DTO 作为 CQRS 查询的结果

c# - 缺少 .NET 4.0 的引用程序集文件夹

asp.net-mvc - 处理分配给img src的操作的返回类型文件中的错误

asp.net-mvc - 使用 Moq 模拟 HttpContextBase

javascript - 从 MVC Controller 操作调用 javascript

c# - 对每个类单独的 MVVM 命令

c# - 具有可空 bool 值的三值逻辑?

c# - 具有多列的列表框

c# - 如何刷新 Windows 窗体控件的简单绑定(bind)?