我正在使用ASP.NET MVC3和SQL Server中的數據庫的Web應用程序項目。還有一個移動應用程序通過REST服務使用來自同一數據庫的數據。下面是我的一些應用程序層:.NET REST服務,實體框架和鬆耦合
模式 - ADO.NET數據模型,使用實體框架
數據訪問層 - 與查詢從數據庫中retrive數據存儲庫
Web應用程序 - 用結構圖和DI MVC3項目,使用存儲庫,鬆耦合,數據庫環境被設置在底了HttpReques t
核心 - DAL和服務層之間的另一層,使用存儲庫並將數據公開到服務層。各種業務邏輯層。
服務層 - REST服務知道核心層而不是DAL。將數據映射到DTO的,並公開給客戶
我這樣的應用程序架構有問題是在服務層的鬆耦合。服務層具有對核心層的引用。核心層具有對數據訪問層的引用並使用其存儲庫。雖然存儲庫沒有默認構造函數。他們期望1個參數和它的數據庫對象上下文(一次性對象)。
在我的網站使用資料庫直接是沒有問題的。我正在使用結構圖,DI使它鬆散耦合。每個上下文都被放置在HttpRequest的末尾。
問題是服務層和核心層。我想在那裏有鬆散的耦合,但不知道如何實現它?如何將數據上下文注入到這些數據上並確保它在某個時刻被處理?我想聽聽一些關於如何把它放在一起的建議。
我在另一個項目中獲得了我的模型,因此存儲庫對該圖層具有依賴性。存儲庫是使用T4模板從Model.edmx生成的。我也對DI和Web上的鬆耦合沒有任何問題,它完美地工作,並且EF上下文在請求結束時處理。我還想提一下,我沒有使用服務來直接在網絡上獲取數據,而是使用存儲庫。服務僅用於移動應用程序。我不確定如何實現服務端的鬆耦合,因爲Service實例化一個需要EF Context作爲其構造函數參數的Repository。 –
@Nebo - Repo採用EF上下文還是接口?它應該有一個接口,例如'IUnitOfWork'。在引擎蓋下,你會實現一個包裝EF上下文的'EntityFrameworkUnitOfWork' - 這就是你鬆散耦合的方式。只有您的存儲庫應該引用EF程序集。 – RPM1984
這是我的一個倉庫:http:// screencast。COM /噸/ IVHzTVIx。 這是Core的經理之一(在Repo和Service之間):http://screencast.com/t/qCgoVTlGLZy。 這是服務(在這裏沒有構造函數,因爲我有問題託管它):http://screencast.com/t/Is3zpkrVP。 ServiceHost只支持類服務類型,所以我不能託管一個接口,而是一個類。 –