適度に大きなVB.NET2.0アプリ(データセットを使用)をC#4.5(EF4を使用)に移行する新しいジョブを開始しました。
ビジネスレイヤーから、「検索」関数がEDMXで定義されたクラスのIEnumerablesを返すようになりました。したがって、このようなものは簡単です。
public IEnumerable<Product> GetProductsByCategory(int categoryId)
ただし、EF4の「Select()」メソッドがより複雑でカスタマイズされた(匿名の)型を生成する場合は、より複雑になります。結果に対応する生成されたクラスはありません。
この関数は層の境界(ビジネスからUI)を越える必要があるため、適切な解決策は、このクエリのカスタムタイプを定義してから、そのタイプのIEnumerableを返すことだと思いました。例えば
public IEnumerable<ProductAccountSummary> GetProductAccountSummariesByCategory(int categoryId)
ProductAccountSummary
手作りのDTO(つまりPOCO)はどこにありますか。
ただし、コードレビュー中に、チームリーダーは私のアプローチに失敗しました。彼は私にDTOを削除し、メソッドシグネチャを次のように変更するように求めました。
public IEnumerable GetProductAccountSummariesByCategory(int categoryId)
....その理由は、カスタムタイプを使用する必要があるたびにDTOを手作りするオーバーヘッドなしに、IEnumerableをUIグリッドなどにバインドできるためです。
だから私の質問は:
- EF4では、カスタムタイプのコレクションを層の境界を越えて渡すための一般的なアプローチは何ですか?IEnumerable(暗黙的に「オブジェクト」の)を返すことは、私には正しくないようです。私は何かが足りないのですか?