临时数据和存储库模式

Jan*_*ich 5 sql database model repository-pattern

从存储库返回ad hoc(自定义大小写)数据的推荐方法是什么?这些数据不适合任何模型实体或扩展某些模型实体?

101例子是无处不在的hello word应用程序:博客系统.假设您要加载帖子列表,其中帖子条目具有Post实体中不存在的一些其他信息.假设这是评论的数量以及上次评论的日期和时间.如果使用普通的旧SQL并直接从数据库中读取数据,这将非常简单.如果我无法负担为每个帖子加载评论的整个集合,我应该如何以最佳方式使用存储库模式,并且我想在一个数据库中执行它?这种情况有没有常用的模式?现在假设您有一个中等复杂的Web应用程序,其中每个页面需要稍微不同的自定义数据,并且无法加载完整的层次结构(性能,内存要求等).

一些随意的想法:

  1. 向每个模型添加属性列表,这些属性可以由自定义数据填充.

  2. 子类模型实体,并为每个子类创建自定义读取器.

  3. 使用LINQ,撰写即席查询和读取匿名类.

注意:我最近问了一个类似的问题,但它似乎过于笼统,并没有引起太多关注.

例:

根据以下答案中的建议,我将添加一个更具体的例子.这是我试图描述的情况:

IEnumarable<Post> posts = 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

}
Run Code Online (Sandbox Code Playgroud)

如果我不做任何额外的事情并使用现成的ORM,这将导致n + 1个查询或可能一个查询加载所有帖子和评论.但最好的情况是,我希望能够只执行一个SQL,它会为每个帖子返回一行,包括帖子标题,正文等,以及评论计数和最近的评论日期.这在SQL中是微不足道的.问题是我的存储库无法读取并将此类数据放入模型中.最大日期和计数在哪里?

我不是问怎么做.您可以随时以某种方式执行此操作:向存储库添加额外的方法,添加新类,特殊实体,使用LINQ等,但我想我的问题如下.为什么存储库模式和正确的模型驱动开发如此被广泛接受,但它们似乎并没有解决这个看似非常普遍和基本的情况.

Kur*_*out 0

不能说我真的明白问题是什么,只是在这里向空中射击:

  • 添加特定实体来封装您想要的信息
  • 向帖子添加属性评论。(我不明白为什么这需要您获取所有评论 - 您只需获取正在加载的特定帖子的评论即可)
  • 使用延迟加载仅在访问属性时获取注释

我认为如果您将平台、语言和 O/R 映射器指定为特定的(似乎是 .NET C# 或 VB,因为您提到了 LINQ。LINQ 2 SQL?实体框架?其他的东西),您将有更大的机会看到您的问题得到解答?)