2009-11-29 61 views
5

我開始了一個新的基於WCF的項目,該項目由「引擎」和一些桌面應用程序組成。 但我發現很難做出我的項目結構。使用WCF的DDD項目結構

  • 引擎(Windows服務,該服務主機WCF服務的桌面應用程序的訪問,並舉辦所有的業務邏輯)共享

  • MyProject的

  • 桌面應用程序(僅演示)

  • .Core(客戶/客戶,客戶/ ICustomerService)

  • 引擎

    • MyProject.Engine(客戶/的CustomerService,客戶/ ICustomer,客戶/ ICustomerRepository)
    • MyProject.Infrastructure.SqlServer(客戶/客戶(LinqToSql具體),客戶/ CustomerRepository)
  • WinForm應用程序

  • MyProject.Core
  • MyProject.UI

我是對的嗎?

回答

21

如果你在做DDD,我覺得很奇怪你沒有領域模型。你有一個所謂的引擎,它有多個問題。它實現您的業務邏輯並知道如何將您的業務邏輯託管爲Windows服務。

我會提出一個項目結構如下:

MyProject.Model:定義抽象庫,實體,值對象,服務(DDD項)等領域邏輯。它沒有提及其他項目

MyProject.DataAccess:使用linq2sql實現存儲庫。有一個參考MyProject.Model

MyProject.ServiceModel:包含服務合約和其他相關的東西公開您的域模型作爲WCF服務。該項目還將包含服務所服務和接受的域對象的服務特定表示。原因是你可能不應該使用WCF數據合同中所需的屬性來修飾你的域類。該項目引用MyProject.Model。

MyProject.Service:包含您的服務的app.config並通過自定義的ServiceHost和ServiceHostFactory執行依賴注入。它引用MyProject.Model MyProject.ServiceModel和MyProject.DataAccess +你最喜歡的DI框架(例如Windsor Castle)

MyProject。PresentationModel:定義用戶界面中使用的各種視圖模型和命令。它具有對由MyProject公開的服務的服務引用。服務

MyProject.WinUI:您的WPF應用程序。參考MyProject.PresentationModel。

請注意,您可能在Eric Evans的關於DDD的書中讀到的大部分內容只涉及MyProject.Model的內容。其他項目正在構建額外的層次,而不是直接在先生中提到。埃文斯的書。

請記住,通過明確區分問題並使用依賴注入,您最終將獲得易於測試的代碼。使用上面提出的結構,您應該可以測試幾乎所有的東西,因爲您的UI只包含XAML。

無論如何,這只是我的承擔。請隨時詢問是否需要澄清一些內容。

祝你好運。

/Klaus

+0

+1寫得很好。 – 2009-12-01 03:46:46