階層化された .NET 4.0 アプリケーションを作成しています。データ レイヤーは Entity Framework を使用して実装され、エンティティ インスタンスを呼び出し元、つまりビジネス レイヤーに提供するリポジトリがあります。エンティティ フレームワークが特定のエンティティを 2 回 (キーなどで) 要求されると、同じインスタンスが返されるため、エンティティに加えた変更は、エンティティが使用されている他の場所に反映されます。ただし、有効期限ポリシーがないため、実際にはキャッシュ機能ではありません。少なくとも多くの場合、エンティティ フレームワークは引き続きデータベースにクエリを実行するため、パフォーマンスはあまり改善されないようです。ポイントは、各エンティティのインスタンスが (コンテキストごとに) 1 つだけであることを確認することです。
ビジネス層では、エンティティは、エンティティとは構造が異なる可能性があるビジネス オブジェクトにマップされます。ここでも、データ層のリポジトリと同様に、ビジネス オブジェクトのインスタンスを取得するための集中アクセス ポイントがあります。私の現在の目標は、エンティティ フレームワークが提供するのと同じ機能、つまり「特定のオブジェクトに対して常に同じインスタンスを返す」ことをビジネス レイヤーで実現することです。アプリケーション内の特定のビジネス オブジェクトへのすべてのアクセスが同じインスタンスで機能することを確認したいと思います。
編集開始
文脈認識が重要!エンティティ フレームワークと同様に、各ビジネス オブジェクト インスタンスの一意性は、厳密にアプリケーション全体ではなく、コンテキストごとに提供する必要があります。ビジネス層にはコンテキストの概念もあり、各コンテキストは各ビジネス オブジェクトの独自のインスタンスを持つ必要があります。このインスタンスは、コンテキストが使用されるすべての場所で再利用する必要があります。
また、すべてのビジネス オブジェクト クラスに実装する必要のないソリューションを探しています。何百もの可能性があります。リポジトリを実装する人にとって可能な限り透過的な、フレームワーク コードでのソリューションを希望します。エンティティ フレームワーク自体も特定のエンティティ タイプを認識しませんが、エンティティ フレームワークはエンティティ モデル開発者に対して透過的なこの機能を提供できます。
編集終了
私の質問は次のとおりです。
- この「オブジェクトごとに 1 つのインスタンスのみ」という動作の名前はありますか? Google の検索語句は何でしょうか。
- リファレンス、ガイドライン、またはベスト プラクティスはありますか、それともこの問題を扱う設計パターンはありますか?
- そのような機能を作成するのに役立つ、またはそれを完全に提供する.NETのクラスはありますか?
ありがとう、ピーター。