2

C# でコンテキスト データをオブジェクトに関連付けるための汎用モデルを考え出そうとしています。次のように記述できるキャッシュシステムを構築しました...

バックグラウンド ストーリー -> キャッシュは、さまざまな asp.net アプリケーションに使用するカスタム CMS 実装の一部である、頻繁に要求される情報への「読み取り専用」アクセスを提供するシングルトン実装です。作成したデスクトップ アプリケーションを介してデータを更新すると、次に Web サーバーがキャッシュをロードしたときに、変更内容が訪問者に反映されます。私のキャッシュは以下に準拠しています...

  1. すべてのオブジェクトには一意の ID があります

  2. 関連テーブルで定義された ID マッピングによって、任意のオブジェクトを他の任意のオブジェクトに関連付けることができます。

  3. 特定のオブジェクトへの関連付けがいくつ存在しても、そのオブジェクトの 1 つのインスタンスのみがキャッシュに読み込まれます。

たとえば、オブジェクト A は、オブジェクト C のコレクションに関連付けることができます。同様に、オブジェクト B もオブジェクト C のコレクションに関連付けることができます。オブジェクト A のインスタンスから ID 23 のオブジェクト C を要求し、オブジェクト B から ID 23 のオブジェクト C を要求すると、オブジェクト C の同じインスタンスへのハンドルが取得されます。

画像に追加するデータがいくつかありますが、データ自体はオブジェクト A に属しておらず、オブジェクト C にも属していません。データは、オブジェクト A とオブジェクト C の関連付けに固有の情報です。

  1. 私の最初のアイデア: 追加データは、実際にはオブジェクト C 自体に属していないため、オブジェクト C とは別に保管してください。この情報をオブジェクト A 内に保持し、ディクショナリで検索できるようにします。このアプローチでデータにアクセスする必要がある方法が好きではありません。バインドの目的と使いやすさのために、オブジェクト C または派生クラスを介して追加のデータに直接アクセスしたいと考えています。

  2. 私の 2 番目のアイデア: 追加のコンテキスト データを含み、簡単にアクセスできるプロパティを提供するオブジェクト C (オブジェクト D と呼びます) から派生クラスを作成します。これはバインディングに対処し、私が探していた使いやすさを提供します. このアプローチに関する私の問題は、オブジェクト A がオブジェクト D のコレクションを参照しており、オブジェクト A のデータ全体を複製して上記のモデルを壊す必要があることです。これにより、追加の関連付け情報を追加できるようになります。

私が本当に望んでいるのは、特定の ID に対してオブジェクト C のインスタンスを 1 つだけ保持し続け、適切なコンテキストで簡単にアクセスできるコンテキスト データとプロパティを追加することです。これはできますか?ここで他の提案も受け付けています!私は自分のソリューションが一般的で健全なものであることを望んでいます。そうすれば、それを忘れて、前に戻ってより良いソリューションを見つけたいという絶え間ない悩みを抱える必要がなくなります。

4

2 に答える 2

0

私は最終的に2番目のアイデアに行き着きました。オブジェクト D は、独自のプロパティ/メンバー/メソッドを持つだけでなく、オブジェクト C を返すプロパティも持つ特別な種類のオブジェクトになりました。オブジェクト D は、キャッシュ アルゴリズムによって識別される特定のインターフェイスを実装する必要があります。プロパティによって返されたオブジェクト C が既に読み込まれている場合は、db から追加のコピーを読み込む代わりに、そのオブジェクトが返されるようにキャッシュ システムを更新しました。

于 2013-12-05T20:23:53.257 に答える