0

Linq to SQLは、IQuery可能でリレーションがいっぱいのオブジェクトを作成します。
HTMLヘルパーには、のような特定のインターフェイスオブジェクトが必要ですIEnumerable<SelectListItem>

私が起こり得ること:

  • すべての手荷物なしでLinqからSQLへのオブジェクトを再利用します。つまり、追加のドメインモデルクラスなしでLinqからSQLオブジェクトへのPocosを返しますか?
  • SelectListItem列挙のようなHtmlヘルパーオブジェクトに簡単に変換できる(または変換できる)オブジェクトを抽出しますか?

関心の分離を壊さずにこれを行う方法はありますか? ニーズを埋めるための巧妙なトリック?

たとえば、これがリポジトリ内にある場合、SelectListItemはそこにありません。これselect newは、手荷物なしでLinqからSQLにオブジェクトを切り出すための優れた方法ですが、それでも参照されるべきではないクラスを参照しています。

 IEnumerable<SelectListItem> result = (from record in db.table
                                       select new SelectListItem {
                                           Selected = record.selected,
                                           Text= record.Text, 
                                           Value= record.Value }
                                      ).AsEnumerable();
4

2 に答える 2

2

IService インターフェイスと Service クラスのユーザーを見てきました。基本的には、リポジトリとコントローラーの間のステップです。

長所:

  • IRepository アクションの戻り値を操作するメソッドを許可します
  • 関心の適切な分離
  • リポジトリが関与する前に、検証ロジックが存在するブリッジになることができます。
  • 依存性注入フレームワーク/パターンで動作可能

短所:

  • コードのムーチョ複製。リポジトリを公開しない限り、おそらく IService のほとんどすべての IRepository メソッドを複製することになります。
  • 「キャッチオール」クラスになることができます。なんでもこなす神クラス!ムアハハ…など

もっとあると思いますが、それは私が見たり使ったりしたものです。

于 2010-04-06T03:59:51.333 に答える
1

この特定の例では、部分クラス定義にToSelectListItem()メソッドなどを作成して、重複を削除できます。あるいは、そこでの結合を避けるために、拡張方法の方が良いかもしれません。

編集:私は通常、DTOでJSONWebサービスを使用します。ProductL2SQLエンティティのフラット化されたJSON対応表現であるProductDtoがある可能性があります。次に、クエリでselect ProductDto.FromProduct(product)を呼び出す必要があります。重複は最小限になりました。

于 2010-04-06T03:54:11.520 に答える