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

Vai*_*hav 3 design-patterns class

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

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

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

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

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

fdo*_*mig 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;
    }
} 
Run Code Online (Sandbox Code Playgroud)

因此,在首页上列出几个没有详细信息的帖子,将不会加载历史记录.

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

作为替代方案,您也可以使用ProxyPattern它来为您提供类似的行为.