0

私が取り組んでいるアプリケーションのモデル レイヤーには、Organizationクラスと 1 対多の関係を持つPersonクラスがあります。Personオブジェクトは、スーパークラスの別のオブジェクト セットとの 1 対多の関係に基づいて、さまざまな役割を持つことができますCertificatePersonaが「署名者」かどうかを判断するには、次のように呼び出します。

public boolean isSignatory() {
    return this.certificatesAsSignatory.size() > 0;
}

ある組織の署名者のリストを返したいので、一連の関係者をループして署名者をチェックします。私がやりたいのは結果をキャッシュすることです。そのため、毎回データベースからデータを再生成する必要はありません。次のようなprivateフィールドを追加しましたOrganization

private List<Person> signatories;

基本的な方法は次のようになります

public List<Person> getSignatories() {
    for ( final Person person : this.people ) {
        if ( person.isSignatory() ) {
            this.signatories.add( person );
        }
    }
    return this.signatories;
}

ここで、リストを返すメソッドを呼び出すときに、結果を格納しsignatoriesて返します。再度呼び出されたときに、signatories既にリストが含まれているかどうかを確認し、計算をやり直す代わりにリストを返すことができます。

私の質問は次のとおりです。署名者のリストのキャッシュを最新の状態に保つにはどうすればよいですか?

4

1 に答える 1

1

したがって、リストには署名者であるすべての人が含まれます。Person が署名者から署名者でない、またはその逆に変更されるたびに、そのリストを更新することをお勧めします。Person が署名者であるかどうかを設定するメソッドがあると思いますか? その関数では、キャッシュをクリアするための呼び出しを行うことができるため、次に必要なときにリストが補充されます。また、新しい Person がデータベースに挿入され、署名者である必要があるときに実行できると推測しています。

あなたのコードがどのように構築されているのかわからないので、より具体的にするのは難しいです。しかし、キャッシュの考え方は、キャッシュ内のデータが変更されたときにキャッシュをリセットすることです。

于 2013-08-15T14:15:50.843 に答える