2011-12-06 233 views
2

我使用ASP.net MVC3作爲我的表示層,我的數據訪問和業務邏輯通過WCF服務公開。我的控制器應該調用WCF服務,還是應該有更高層次的抽象,如調用WCF服務的存儲庫。MVC控制器WCF服務

庫直接調用服務

public ProductController(IProductRepository productRepository) 
{ 
     _productRepository = productRepository; 
} 

public ProductRepository(ProductServiceClient client) 
{ 
     _client = client; 
} 

服務中的控制器

public ProductController(ProductServiceClient client) 
{ 
     _client = client; 
} 

的倉庫類無能爲力除了呼叫通過服務公開的方法。

+0

我的做法是,只有當它做一些事情引入額外的層。如果你認爲你的客戶端邏輯是直接的,那麼只需從控制器調用服務並完成它。如果你想在你的客戶端引入一個業務層,那麼只需要實現「服務層」來編排wcf調用和必要的業務邏輯。 – Roman

回答

1

對不起,我很困惑你的問題,但如果我誤解了,我很抱歉。希望我的指針能夠解決這個問題。

  1. 持久化和定義的方式來處理 基礎設施層即數據處理(在內存中存儲庫, SQL資料庫或一般之一)
  2. 服務相關的資料庫,如果你喜歡使用這些存儲庫執行 合約操作,如讓客戶參與您的案件。
  3. 服務由客戶或請求服務的人調用,並且服務依次調用存儲庫,該庫又調用數據 操作。

所以,你可能需要改變你的WCF與倉庫工作,並讓你的控制器通話services..hope,幫助

+0

對不起,我認爲我的課程命名錯誤。 \t 我的架構:特定於演示的MVC和業務規則 - WCF服務API - 業務邏輯 - 數據訪問(存儲庫模式) – ministrymason

+0

特定於演示文稿的業務規則可以在視圖模型類型範例中處理。實際上有些人認爲它是一種更好的方式,因爲模型完全定義了一個實體,在這種情況下,您的業務邏輯(通過視圖模型綁定到您的視圖)並且還允許驗證。 – user182630

0

我首先要做的確切反例 - WCF應該調用存儲庫中的方法。

數據層應該是通用的,應該可以通過任何方式訪問(wcf應該是一個,mvc網站應該是另一個,等等)。

這樣你也可以單元測試你的項目,並且跟蹤它更容易。在這種情況下,Wcf應該被視爲您的程序的額外API。

我更關心應該在哪裏存儲業務規則,但是我會投票給mvc控制器來處理業務邏輯,而wcf服務會在內部調用這些控制器。

+0

我的架構:特定於演示的MVC和業務規則 - WCF服務API - 業務邏輯 - 數據訪問 - 存儲庫 – ministrymason

+0

您也可以看到:http://stackoverflow.com/questions/1657835/asp-net-mvc-wf-wcf - 服務層 - 如何使用 - 這就是所有功能於一身的項目,但多數民衆贊成我的建議! –

+0

你能舉一個你會使用的架構的例子嗎? – ministrymason