3

我将通过例子来问这个问题。假设我正在设计 StackOverflow,并且我拥有我的用户发布的所有这些帖子。对于每篇文章,我都会跟踪大量内容(标题、标签、作者、时间戳、评论、历史记录等)。

所以我设计了一个名为 Post 的类来处理这个问题。

当我点击 StackOverflow 的主页时 - 我必须列出一些帖子。现在我有一个帖子结构的集合(也许是列表)。

问题是,每当我必须得到一个列表时,我不需要帖子本身中存在的很多细节。例如,在列表页面上我不需要历史记录。

所以,问题是,实现这样的东西的最佳模式是什么。目前我们所做的是我们有一个更轻的 Post 类版本(比如 PostLight),这是在这种情况下使用的 - 但这似乎很俗气。

4

1 回答 1

6

我建议使用LazyLoadingwhich 可以满足您的需求,并且通常与数据库查询一起使用。

假设您有一个Post从数据库加载的类,其中只有一些常用字段。仅在请求时才加载所有其他详细信息。

可以使用这样的东西:

public class Post
{
    private String title;
    private String text;
    private List<Post> history;

    public String getTitle() {
        return title;
    }

    public String getText() {
        return text;
    }

    public List<Post> getHistory() {
        if (null == history) {
            history = loadHistory();
        }
        return history;
    }
} 

因此,在您列出几篇没有详细信息的帖子的首页上,历史不会被加载。

DataLoader您可以在实例化对象时注入自定义,Post然后在延迟加载其他数据时调用该加载器。

作为替代方案,您也可以使用ProxyPatternwhich 给您一些类似的行为。

于 2012-08-11T07:43:18.610 回答