2011-10-19 8 views
1

オームズは、多くの場合、マップ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対多の持つ、もうあなたの「ゲッター」を通過されていませんこの方法でマップされて間違っているようですか?

答えて

0

あなたの質問は本当にわかりませんが、どこが「間違っている」か分かりません。それは選択のIMOを設計するために降ります。各エンティティから階層データ(子エンティティ)にアクセスしますか?もしあなたが最初のフェッチでそのデータをロードしたいのであれば、そのデータを多数に利用することは時間を節約することです(プリロードするかレイジーにロードするかを選択できます)。その場合、最初の例でデータを取得することは良いことかもしれません。私が使用しているとき、私は、きれいにそれを維持したいと、

IList<Child> list = parent.Children.Where(x => x.Deleted == false); 
個人的に

:あなただけそうのような「何が必要フィルタ」「非削除」結果またはを戻すためにデータをフィルタリングするためにLINQを使用することができますリポジトリパターン(私は最近、ActiveRecordパターンの大ファンになりつつあります)。私はそれを自分のメソッド呼び出しに分けることを好みます。リポジトリの呼び出しをプロパティ名の子に追加することもできますが、私の場合、モデルを持っているかどうかと、そのモデルをぼかしているところの境界を越えているように感じます。

しかし、このようにすると、「削除済みかどうか」や「男性または女性」を選択するケースを管理するための基本的なフィルタリングや愚かな束縛やオーバーロードを行う方法がたくさんあります。ちょうど「削除済みかどうか」。

私が言ったように、それは選択になる。どのようにしてアプリケーションを成長させたいのですか?リポジトリ内のばかげた過負荷のリストが終わっていると思うなら、将来のコーダーがコードを理解し、管理するコードが少なくて済むように、パフォーマンスを妨げる(または理想的にはパフォーマンスを向上させる)。どのような場合にテストを行うと、コードを壊すことなくリファクタリングに役立ちます。

「正しい」または「間違った」方法でハングアップしないでください。

+0

ここでlist = parent.children.whereを実行した場合、あなたはあなたの例で使用しましたが、どこにでも何百もの呼び出しがあり、今どこにxdeleted && x.age <18.ゲッターやリポジトリメソッドのポイントは、1つの場所でのみ変更し、契約を破ることがないということです。 – BobTurbo

+0

正確には、私はそれをきれいにして、自分のリポジトリメソッドに入れたいと言った理由です。あなたが何を求めているのか本当にわからないが、元のアドバイスに戻って、あなたとあなたのアプリケーションに合ったものに行って、あなたの「ベストプラクティス」の解釈が教えてくれるあなたは「正しい」または「間違っている」。個人的な経験から、「正しい」または「間違っている」と考えられるものを厳密に遵守しようとすると、大きな進展を遅らせたり、過負荷でコードを膨らませたりすることになります。 – lloydphillips

+0

フィルタリングされたクエリをいくつかの場所で使用する必要がある場合は、コードメンテナンスに役立つ特定のメソッドを作成することが絶対に理にかなっています。クラスのプロパティとしてこれらの結果にアクセスするかどうかは、ドメインのモデル作成方法に関する個人的な選択になります。 – lloydphillips

関連する問題