我将通过例子问这个问题。假设我正在设计StackOverflow并且我拥有用户所做的所有这些帖子。对于每个帖子,我都会跟踪大量内容(标题,标签,作者,时间戳,评论,历史等)。
所以我设计了一个名为Post的类来处理这个问题。
当我点击StackOverflow的主页时 - 我必须列出一些帖子。现在我有一个帖子结构的集合(也许是List)。
问题在于,无论何时我必须获得List,我都不需要Post中本身存在的大量细节。例如,在列表页面上我不需要历史记录。
所以,问题是,实现这样的事情的最佳模式是什么。目前我们所做的是我们有一个较轻的Post类(比如PostLight),这是在这种场景中使用的 - 但这看起来很俗气。
答案 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
,这会给您一些类似的行为。