gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:10:23 24 4
gpt4 key购买 nike

我是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com