从存储库返回ad hoc(自定义大小写)数据的推荐方法是什么?这些数据不适合任何模型实体或扩展某些模型实体?
101例子是无处不在的hello word应用程序:博客系统.假设您要加载帖子列表,其中帖子条目具有Post实体中不存在的一些其他信息.假设这是评论的数量以及上次评论的日期和时间.如果使用普通的旧SQL并直接从数据库中读取数据,这将非常简单.如果我无法负担为每个帖子加载评论的整个集合,我应该如何以最佳方式使用存储库模式,并且我想在一个数据库中执行它?这种情况有没有常用的模式?现在假设您有一个中等复杂的Web应用程序,其中每个页面需要稍微不同的自定义数据,并且无法加载完整的层次结构(性能,内存要求等).
一些随意的想法:
向每个模型添加属性列表,这些属性可以由自定义数据填充.
子类模型实体,并为每个子类创建自定义读取器.
使用LINQ,撰写即席查询和读取匿名类.
注意:我最近问了一个类似的问题,但它似乎过于笼统,并没有引起太多关注.
例:
根据以下答案中的建议,我将添加一个更具体的例子.这是我试图描述的情况:
IEnumarableposts = repository.GetPostsByPage(1); foreach (Post post in posts) { // snip: push post title, content, etc. to view // determine the post count and latest comment date int commentCount = post.Comments.Count(); DateTime newestCommentDate = post.Comments.Max(c => c.Date); // snip: push the count and date to view }
如果我不做任何额外的事情并使用现成的ORM,这将导致n + 1个查询或可能一个查询加载所有帖子和评论.但最好的情况是,我希望能够只执行一个SQL,它会为每个帖子返回一行,包括帖子标题,正文等,以及评论计数和最近的评论日期.这在SQL中是微不足道的.问题是我的存储库无法读取并将此类数据放入模型中.最大日期和计数在哪里?
我不是问怎么做.您可以随时以某种方式执行此操作:向存储库添加额外的方法,添加新类,特殊实体,使用LINQ等,但我想我的问题如下.为什么存储库模式和正确的模型驱动开发如此被广泛接受,但它们似乎并没有解决这个看似非常普遍和基本的情况.