2012-04-23 56 views
0

我設計一個具有多個功能的WCF服務:在WCF 3層設計中 - DAL包含了什麼?

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查詢以從數據庫提取數據。那麼 - 在這種方法中 - DAL應該是什麼?它是空的嗎?

第二種方法: DAL包含對DB執行CRUD操作的函數,這意味着任何LINQ-TO-EF查詢都將在DAL中完成。 所以 - 在這種方法中 - 除了可能的一些驗證,BL究竟做了什麼?

哪種方法是正確的,這是如何回答我對這種方法的關注?

+0

我會用第一種方法,正是我在做的wcf服務 – Usher 2012-04-23 22:15:16

+0

那麼你DAL確切地包括? – 2012-04-23 23:02:06

+0

我的DAL包含數據模型和NHibernate – Usher 2012-04-23 23:12:13

回答

0

MSDN:

的所有代碼特定於基礎數據源 - 如創建對數據庫的連接,發出SELECT,插入,更新,和DELETE命令,等等 - 應設在DAL中表示層不應該包含任何對這種數據訪問代碼的引用,而應該調用DAL來處理任何和所有的數據請求數據訪問層通常包含訪問底層數據庫數據的方法Northwind數據庫,例如,產品和類別表格記錄了待售產品和它們所屬的類別。在我們的DAL中,我們將有如下方法:

GetCategories(),這將返回所有類別

的GetProducts(),這將返回所有產品

GetProductsByCategoryID(的categoryID)的信息的信息,這將返回屬於所有產品指定類別

GetProductByProductID(的productID),它會返回有關特定產品」

當然,你總是可以自由選擇自己的設計信息,但我喜歡堅持使用普遍接受的做法,所以我的代碼可能會在任何商店可以接受,任何人都可以理解,以後要維護它...