オームズは、多くの場合、マップ1対多のような関係:リポジトリパターン、オームズ、そしてゲッターとセッター
class Parent {
IList<Child> Children { get; set; }
}
問題は、リポジトリに、あなたが持っているかもしれないということです。
GetChildrenOfParent(int parentID) {
from c in Children...
return children;
}
あなたは今、子どもを「得る」ための2つの場所を持っています。あなたは、このような多分のみ削除フラグを持っていない子供を返すような何かを、追加したい場合は、あなたが持っているかもしれません:
GetChildrenOfParent(int parentID) {
from c in Children..
where not deleted
return children;
}
または
class Parent {
IList<Child> Children { get .... only get not deleted children; set; }
}
を、あなたは私が取得しています何を参照していますか?ゲッタールーチンの実行を選択する場所が2つあります。このルーチンを持っている論理的な場所がリポジトリにあるようだ、まだそれがあることを意味:
foreach (var child in parent.Children)
が故にORMの全体的なアイデアは、1対多の持つ、もうあなたの「ゲッター」を通過されていませんこの方法でマップされて間違っているようですか?
ここでlist = parent.children.whereを実行した場合、あなたはあなたの例で使用しましたが、どこにでも何百もの呼び出しがあり、今どこにxdeleted && x.age <18.ゲッターやリポジトリメソッドのポイントは、1つの場所でのみ変更し、契約を破ることがないということです。 – BobTurbo
正確には、私はそれをきれいにして、自分のリポジトリメソッドに入れたいと言った理由です。あなたが何を求めているのか本当にわからないが、元のアドバイスに戻って、あなたとあなたのアプリケーションに合ったものに行って、あなたの「ベストプラクティス」の解釈が教えてくれるあなたは「正しい」または「間違っている」。個人的な経験から、「正しい」または「間違っている」と考えられるものを厳密に遵守しようとすると、大きな進展を遅らせたり、過負荷でコードを膨らませたりすることになります。 – lloydphillips
フィルタリングされたクエリをいくつかの場所で使用する必要がある場合は、コードメンテナンスに役立つ特定のメソッドを作成することが絶対に理にかなっています。クラスのプロパティとしてこれらの結果にアクセスするかどうかは、ドメインのモデル作成方法に関する個人的な選択になります。 – lloydphillips