2011-10-11 50 views
7

我正在研究我的第一個「真正的」DDD應用程序。DDD。用戶可配置設置屬於哪裏?

目前,我的客戶端無權訪問我的域層,並通過發出命令請求更改域。

然後我有一個單獨的(展平)閱讀模型來顯示信息(如簡單的CQRS)。

我現在正在處理配置,或者特別是用戶配置的設置。以博客應用程序爲例,設置可能是博客標題或徽標。

我開發了一個通用配置構建器,它基於一個簡單的鍵值對集合構建一個強類型的配置對象(例如BlogSettings)。我被困在這些配置對象是否是我的域的一部分。我需要從客戶端和服務器訪問它們。

我在考慮創建一個包含這些配置對象的「共享」庫。這是正確的方法嗎?

最後,保存此類配置設置的代碼應該在哪裏存在?一個簡單的解決方案是將這些代碼放入我的Domain.Persistence項目中,但如果它們不屬於域的一部分,它們是否應該在那裏?

感謝,

+2

查看它的另一種方法可能是您有一個單獨的「配置」或「設置」有界上下文。這是一個邏輯分離,而不是物理分離。因此,您仍然可以使用各種技術(客戶端與服務器)來提供對上下文的訪問。但是,所有代碼都屬於上下文。 –

+0

@YvesReynhout這是我們最終走的路線,有一個我們交互的配置上下文。然而,我們確實共享了配置對象 - 在這種情況下,分離會導致代碼的不必要的重複。 –

+0

哦,但邏輯分隔不會導致代碼重複。它只是意味着有界的上下文負責代碼。如何部署有界上下文的代碼與這個事實是完全正交的(它可以與其他有界上下文的代碼一起完全託管在一個進程中)。 –

回答

8

用戶配置的設置都屬於域,如果他們是強類型和基於通用語言,即「BlogSettings」爲藍本。設置和其他域對象之間的唯一區別在於概念上的設置是「域單例」。他們沒有像其他實體一樣的生命週期,並且只能有一個實例。

通用配置生成器屬於Persistence,就像負責保存和讀取設置的代碼一樣。

+0

是否可以將這些「域單例」公開給客戶端,還是應該爲客戶端創建一個「讀取」版本(基本上完全相同)。我一直在試圖避免從客戶端引用我的域名。 –

+0

以對待其他實體的方式處理這個「設置」對象。如果您有其他實體的「閱讀」版本,那麼也可能有「讀取」版本的設置。 – Dmitry