2012-06-19 50 views
1

我正在開發一個WPF應用程序,它連接到幾個WCF服務(與LINQ-TO-EF一起工作)。我的WPF + WCF場景中是否需要DDD?

的WPF設計在MVVM方式。

對於每一個WCF服務,我有以下:

  • 服務層DLL - 這包括服務接口,服務實現。服務的實現只是創建BL對象並調用它們的方法
  • 服務BL層DLL - 這包括管理器工廠(工廠創建的UserManager任務管理等)。每個經理都有一個接口+實現(用於單元測試目的和DI)。例如 - 任務管理具有「GetTasks」,「CheckTaskIsValid」等。另外,對BL層具有「Trasnlator」類從數據實體轉換爲DTO。 BL管理器方法將DTO返回到服務層。

除了上述之外,所有的服務的BL引用數據訪問層DLL包括:

    與來自MS SQL服務器
  • 自動生成的DbContext + POCO表
  • EDMX文件實體
  • 查詢供應商(由BL管理類使用)。每個查詢提供者都有一個用於單元測試和DI目的的接口+實現。
  • 的DbContext廠 - 接口+實現,對於單元測試和DI目的。

該服務採用CQS設計(Command-Query-Seperation,不與CQRS混合使用),這意味着有一個服務只負責查詢,一個服務負責發送命令。

我使用DI(使用AutoFac)通過我的WCF主機項目承載所有服務(我實現了IInstanceProvider,以便我可以注入依賴到服務)。

我沒有實現我自己的倉庫或單位工作的,因爲已經的DbContext UOW和存儲庫。

是這樣的設計有缺陷?

我已經閱讀了很多關於DDD的帖子,我知道我的設計是 DDD。

我的問題是 - 是我不夠好設計?我是否需要將所有代碼重構爲DDD? (使用聚合和根集合等)。

我試圖提供儘可能詳細地瞭解設計的,所以我希望我沒有得到答案,如「你的問題太籠統」或「需要一些例子」 ...任何有用的信息會很非常感激 !

+1

我們如何建議您使用領域驅動設計當你沒有提到任何關於你的域名? –

+0

@Martijn - 你能解釋一下你需要我提供哪些信息? (我不知道'Domain'是指什麼) –

回答

2

是的,你沒有DDD設計,但不是DDD並不意味着壞的設計。我認爲,當您的系統具有可測試性和靈活性以便進一步開發時,可以根據您的需求進行擴展 - 比您需要的系統設計好。

所有其他的聲音,除了良好:

我沒有實現我自己的倉庫或單位工作的,因爲 的DbContext已經是UOW和存儲庫。

不實現您的UoW和存儲庫意味着您與Entity Framework緊密耦合,它可能是可測試性的問題。但是你可以用集成測試再次覆蓋測試數據庫。數據庫邏輯的單元測試有時會自行測試。

您需要DDD嗎?也許當系統比進化更復雜時,你會來DDD和CQRS。但是,如果對於您來說足夠簡單,易於維護和進一步開發,可測試,可擴展,當系統不脆弱時,我認爲,最好專注於業務需求

相關問題