基于上下文仅返回对象中所需数据的最佳模式是什么?

时间:2012-08-11 07:34:43

标签: class design-patterns

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

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

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

问题在于,无论何时我必须获得List,我都不需要Post中本身存在的大量细节。例如,在列表页面上我不需要历史记录。

所以,问题是,实现这样的事情的最佳模式是什么。目前我们所做的是我们有一个较轻的Post类(比如PostLight),这是在这种场景中使用的 - 但这看起来很俗气。

1 个答案:

答案 0 :(得分:6)

我建议使用LazyLoading来做你想要的,并且通常用于数据库查询。

假设您有一个类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,然后在延迟加载其他数据时调用该加载器。

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