データアクセスコードをビジネスオブジェクトから切り離すことは新しいことではありませんが、私は常に何かを達成するための「最良の方法」を探しています。
私は次のクラスを持っています:
オレンジ-これは私のビジネスオブジェクトです。
OrangeList-これはオレンジのリストです。
ユーザーは、OrangeList.Fetch(someCriteria)を呼び出して、データストアからOrangeオブジェクトをフェッチします。したがって、OrangeListにはデータアクセス層への参照が必要です。つまり、プロパティはIDataProviderMyDataProviderです。
これは私にとってはうまくいきますが、問題は、単一のOrangeを単独でフェッチできないことです。常にOrangeListを経由する必要があります。
そのいずれか、またはOrangeとOrangeListの両方は、DataProviderを保持するいくつかの共通オブジェクトから派生する必要があります。
これは問題ですか、それとも私のアプローチはそもそもマークから外れていますか?
ヒント/ポインタはありがたいです、ありがとう。
編集:以下の議論に照らして、私はリポジトリパターンをチェックアウトしました。
ただし、私のプロジェクトでは、リポジトリをDALからさらに分離することをお勧めします。
SO ....リポジトリは、私がオレンジを取得し、オレンジを保存する方法ですが、それでも方法がわかりません。私はそれをIDataProviderに委任します。これは、図にリストされているものの数である可能性があります。
明確にするために-オレンジはそれ自体をフェッチ/更新する方法を知りませんよね?それは純粋なビジネスオブジェクトです-そしてそれがポイントですか?
代替テキストhttp://img22.imageshack.us/img22/2460/repositorya.jpg
ご参考までに、私の「LegacyDataProvider」は、ファイルベースのデータベース(FoxPro、eek)にアクセスするOLDシステムをサポートすることですが、これでこれをまとめて、新しいコードから腕の長さに保つことができます。
.NETアセンブリの構築に関しては、循環参照を防ぐために、Repository.DLL [OrangeRepo]、DataProviderInterface.DLL [IDataProvider]、およびBusinessObjects.dll[Orange]があるように見えます。すべて良いですか?
その時、私はリポジトリのアイデアを思いついたのですか?