在WCF 3层设计中 - DAL究竟包含哪些内容?

时间:2012-04-23 21:15:39

标签: wcf data-access-layer

我正在设计一个具有多个功能的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究竟做了什么?

哪种方法是正确的,如何回答我对该方法的关注?

1 个答案:

答案 0 :(得分:0)

来自MSDN:

特定于基础数据源的所有代码 - 例如创建与数据库的连接,发出SELECT,INSERT,UPDATE和DELETE命令等等 - 应该位于DAL中。< / strong>表示层不应包含对此类数据访问代码的任何引用,而应调用任何和所有数据请求的DAL。数据访问层通常包含访问底层数据库数据的方法.Rorthwind数据库,用于例如,有产品和类别表记录了待售产品及其所属的类别。在我们的DAL中,我们将使用以下方法:

GetCategories(),它将返回有关所有类别的信息

GetProducts(),它将返回有关所有产品的信息

GetProductsByCategoryID(categoryID),它将返回属于指定类别的所有产品

GetProductByProductID(productID),它将返回有关特定产品的信息“

当然,你总是可以自由选择自己的设计,但我喜欢坚持普遍接受的做法,所以我的代码可能在任何商店都可以接受,并且对于那些必须在以后维护它的人来说是可以理解的......