我是 ASP.NET MVC 2 的新手,也是我关注的示例之一 is the official ASP.NET MVC Music Store在 codeplex 上。
在示例项目中,他们有这样的场景:共有三种模型:Albums
、Artists
、Genres
。
让我怀疑的是他们处理 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/