0

いくつかの機能を持つ WCF サービスを設計しています。

1.  ProductDTO         GetProduct ( Guid productId )
2.  void               SetProduct ( ProductDTO product )
3.  List<ProductDTO>   GetAllProducts()
4.  void               SetAllProductValues ( int newValue )

これらは、サービスがサポートする操作です。ビジネス層 (BL) とデータ アクセス層 (DAL) を用意します。

LINQ-TO-EF を ORM として使用して、SQL サーバー テーブルに接続します。

私の質問は - DAL には正確に何を含めるべきですか?

異なることを言っている2冊の本を読んだので、この質問をしています。

最初のアプローチ: DAL には、データ アクセス層に必要なクラスのみが含まれます (存在する場合)。そのための特別なエンティティまたは機能が含まれています。LINQ-TO-EF の EDMX とモデル ファイルは、別のアセンブリにあります (BL とサービス レイヤーによって参照されます)。このメソッドでは、BL に LINQ クエリを実行する実際の関数が含まれています。例: 「GetProduct」は、LINQ クエリを実行して DB からデータを抽出します。では、このアプローチでは、DAL には正確に何が含まれているのでしょうか? 空ですか?

2 番目のアプローチ: DAL には、DB で CRUD 操作を実行するための関数が含まれています。つまり、LINQ-TO-EF クエリはすべて DAL で実行されます。では、このアプローチでは、おそらくいくつかの検証を除いて、BL は正確に何を行うのでしょうか?

どのアプローチが正しいのか、それはそのアプローチに関する私の懸念にどのように答えますか?

4

1 に答える 1

0

MSDNから:

"データベースへの接続の作成、SELECT、INSERT、UPDATE、および DELETE コマンドの発行など、基になるデータ ソースに固有のすべてのコードは、DAL に配置する必要があります。プレゼンテーション レイヤーには、何も含めないでください。このようなデータ アクセス コードへの参照はありませんが、代わりにすべてのデータ要求に対して DAL を呼び出す必要があります. データ アクセス層には通常、基になるデータベース データにアクセスするためのメソッドが含まれています. たとえば、Northwind データベースには、製品とカテゴリのテーブルがあり、販売する製品とそれらが属するカテゴリ. 私たちの DAL には、次のようなメソッドがあります:

すべてのカテゴリに関する情報を返す GetCategories()

すべての製品に関する情報を返す GetProducts()

GetProductsByCategoryID(categoryID)、指定されたカテゴリに属する​​すべての製品を返します

特定の製品に関する情報を返す GetProductByProductID(productID)」

もちろん、いつでも独自のデザインを自由に選択できますが、一般的に受け入れられている慣行に固執するのが好きなので、私のコードはどのショップでも受け入れられ、後でそれを維持しなければならない人にも理解できるでしょう...

于 2013-07-24T13:37:05.307 に答える