4

私はインピーダンスの不一致によって運命づけられているかもしれませんが、IRepository と不変オブジェクトで見た例を調整しようとしています。

私は、何百もの Web リクエストが製品の「ワーキング セット」で動作するカタログ作成アプリケーションに取り組んでいます。カタログ全体のサブセットが常に使用される傾向があります。

同時に、当社のデータ チームは常に製品データを更新しています (新しい画像、更新された価格、説明など)。

パフォーマンスのためには、製品を不変と考えたほうがよいように思えます。それらはリポジトリによってロードおよびキャッシュされ、多くのスレッドが同じ製品オブジェクトに同時にアクセスできます。

しかし、この考えは、私が Update/Delete メソッドで見た IRepository の例の多くで壊れているようです。

そこで私は、エンティティへの変更がコンパニオン 'editor' オブジェクトを介して行われ、変更を保持し、問題の製品を強制的にリロードして全員が使用できるようにする 'editor' モデルを想定しました。製品が変更されることはありません。外部から「編集」されて再ロードされるだけです。

これは意味がありますか?説明されているように、これはリポジトリで機能しますか?

4

2 に答える 2

4

リポジトリは、データの取得/保存のみを担当します。ファクトリは、新しいオブジェクトの作成を担当します。

あなたの場合、不変オブジェクトは問題ありません。ただし、スーパーシードされた製品を無効にしてリポジトリ キャッシュから削除する方法が必要です。ダングリング参照は取得時に有効だったので、ほとんどの場合無視できます。

製品の更新の場合は、工場経由で新しい製品を作成する必要があります。リポジトリには、Retrieve (または Find)、Save、および Supersede の 3 種類の操作のみが含まれます。Save は、変更されていない新しい製品を保存します。そして、Supersede は新しい製品を保存し、古い製品を無効にしてキャッシュから消去します。

C# シグネチャに関しては、2 つのストレージ メソッドが次のように見えると想像できます。

void Save(Product product);

void Supersede(Product oldProduct, Product newProduct);

これが役立つことを願っています。

于 2009-04-15T12:21:28.310 に答える
1

排他的/悲観的または楽観的の単純なロックを実行できないほどの高い同時実行性またはパフォーマンス要件がありますか?

于 2009-04-15T12:20:10.827 に答える