3

例によってこの質問をします。私が StackOverflow を設計していて、ユーザーが作成したこれらすべての投稿があるとします。すべての投稿について、私が追跡しているものはたくさんあります (タイトル、タグ、作成者、タイムスタンプ、コメント、履歴など)。

そこで、これを処理する Post というクラスを設計します。

StackOverflow のホームページにアクセスすると、多数の投稿を一覧表示する必要があります。これで、投稿構造 (おそらくリスト) のコレクションができました。

問題は、リストを取得する必要があるときはいつでも、投稿自体に存在する多くの詳細は必要ないということです。たとえば、リスト ページでは、履歴は必要ありません。

したがって、問題は、このようなものを実装するための最良のパターンは何かということです。現在私たちが行っていることは、そのようなシナリオで使用される Post クラス (PostLight など) の軽量バージョンを用意することですが、これは粘着性があるように思えます。

4

1 に答える 1

6

LazyLoadingあなたが望むことを行い、データベースクエリで一般的に使用される whichを使用することをお勧めします。

通常使用される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同様の動作を行う を使用することもできます。

于 2012-08-11T07:43:18.610 に答える