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 究竟应该包含什么?

我问这个问题是因为我读过两本不同的书,说的是不同的东西:

第一种方法: DAL 仅包含数据访问层所需的类(如果有的话)。它包括为此的特殊实体或功能。LINQ-TO-EF 的 EDMX 和模型文件位于单独的程序集中(由 BL 和服务层引用)。在这种方法中 - BL 包含执行 LINQ 查询的实际函数。例如:“GetProduct”将执行 LINQ 查询以从数据库中提取数据。那么 - 在这种方法中 - DAL 中究竟应该包含什么?是空的吗?

第二种方法: 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 回答