【发布时间】:2010-06-19 18:19:26
【问题描述】:
一方面,我想编写一个杀手级应用程序(在 ASP.NET MVC 中);) 但另一方面,我是否应该不惜一切代价坚持所谓的“最佳实践”,我有很多疑问。所以我有一个设计问题,我真的希望你能帮助我。
想象一个标准的博客。我想显示 10 个最近的帖子。我的数据库有标准Posts, Categories, Tags, PostTags
表。因此,作为自然结果,我的域 Post 类具有如下属性:
public Category Category { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
我使用带有 POCO 支持的 EF4。我使用标准查询加载数据:
from p in context.Posts.Include("Category").Include("Tags")
select p
但是我为什么要加载整个 Post 类(例如这两个属性),当页面上我想要显示的所有内容(除了帖子本身)都是指向类别和每个标签的链接时,所以我需要的所有列分别是:[Categories].[Name], [Categories].[Slug], [Tags].[Name], [Tags.Slug]。
我不需要整个 Category 或 Tag 实例(在数据库的相应表中可能有 100 列)!我想当一个网站收到很多请求时,它确实很重要。所以最好不要加载所有列(避免可怕的SELECT *)。
我想我可以在我的域中添加一个新类,比如:ShortPost。但我觉得这不是我的领域! Post 是模型,ShortPost 是……嗯,只是完整 Post 的一部分。此外 - 我觉得这个 ShortPost 就像修改/调整域(模型)只是为了取悦视图。
总结一下:当在视图端我不需要整个对象时,我真的应该加载整个模型实例吗?您能告诉我一些首选的解决方案/方式/等吗?
【问题讨论】:
标签: asp.net-mvc entity-framework dns