我正在開發使用ASP.NET MVC的基於Web的應用程序。我想要擁有豐富的域模型,而不是瘦/貧血模型。是否可以在我的域模型中使用數據庫上下文
我已經模擬了我的解決方案,沿着洋蔥架構的線條。不同的項目是如下:
- {} .Domain.Core - 包含其在基礎設施層
- {} .Database實現的域對象和接口等IDbContext - 是數據庫prject
- {]。基礎設施 - 包括實施記錄,數據訪問等
- {}名.web - 視圖和控制器
****的數據訪問使用dapper完成,IDbContext是2個簡單的命令查詢接口的封裝。我已將每個查詢分隔爲單獨的類。
爲了討論的緣故,我正在申請一小部分應用程序。
我有一個版本的文檔庫中包含的文件中包含的標籤其他元數據,權限等
是如下圖所示
我的文檔對象的簡化模型我想的要在域對象中定義操作,因爲每個操作都涉及業務邏輯。 讓我把「刪除」作爲一個操作。操作必須執行
- 驗證,如果用戶有權限刪除
- 檢查是否有任何關聯,將通過此獲得的影響刪除
- 檢查,如果沒有工作流過程中
- 刪除在交易中來自數據庫的實際項目
如上例所示,我需要數據庫上下文來完成此操作。 我現在的想法是,如果建模是讓域對象具有IDbContext,它可以執行查詢公開。
在我的控制器類我所謂的域對象,並執行操作。
我不確定在域對象中傳遞IDbContext是否正常?如果沒有什麼更好的方法來模擬這個?
我不相信在具有一個單獨的服務層,因爲 1)控制器充當用於大多數情況下 2)服務層只是重複從域相同的方法,以另一級的服務層的第一層
讓我知道如何讓這個設計更好。
感謝您的詳細回覆。根據我的理解,您正在創建一個域服務,其中一個或多個域對象需要進行交互(在大多數情況下都是如此)。在此圖層中,您正在訪問dbcontext。那麼核心領域是否意識到了域服務的接口,但實際的實現是在外部的呢?因此,我的控制器仍然與域和對象進行交互,與域服務進行交互以執行任何操作。我的理解是否正確? – 2014-10-19 18:57:56
@Sharath Chandra更新了我的答案和更多信息。 – 2014-10-19 22:14:28
感謝您瞭解我對域服務和應用程序服務的理解。在附註中,我曾嘗試過埃裏克埃文斯的DDD,但因爲感覺太乾燥而放棄了。但是,通過一些實際的工作,讓我再試一次。 – 2014-10-20 04:22:35