2011-12-06 62 views
0

我有一個域模型來處理投訴。許多功能都需要向外界公開,所以我可以創建一個公共可用的WCF REST服務來實現這一點。其他功能僅用於內部目的(管理員),所以我可以創建另一個內部託管的WCF服務來執行此操作。多服務使用的域模型?

結果是兩個服務使用相同的域模型。

從技術上講,這意味着兩個可部署單元(服務)使用相同的類庫 - 因此如果類庫發生更改,我必須部署這兩個服務。

這是一件壞事,有一個類庫變化很多被超過1個可部署單元使用?我是否應該讓外部服務使用內部服務而不是域模型,以便域模型僅由內部服務使用?

想知道最好的方法是什麼,確保以後沒有技術問題(易於維護和部署)。感謝您的建議!

編輯:我決定這樣做:公共服務將作爲WCF REST + JSON公開,並且將只負責將數據轉換爲移動應用程序所需的正確格式。此公共服務使用內部命令服務(具有完整域的WCF)來執行命令和內部查詢服務(ADO.NET數據服務)來執行查詢。

回答

1

這是一件壞事,有一個類庫變化很多被超過1個可部署單元使用?

它可以創建管理問題,但有時是不可避免的,特別是對於共享庫。但是,在處理域模型時,最好限制公開模型功能的服務數量。我喜歡你提出的將外部服務引用爲內部服務的解決方案。然後,外部服務爲內部服務提供了一種外觀,而內部服務專注於公開域的功能。但是,正如Thomas Jaskula所指出的那樣,評估服務的行爲方面非常重要。外部服務是否從內部服務公開了有限的一組功能,還是一起提供了不同的功能?什麼是有界的情況?

0

我不確定我們是否在討論域驅動設計,但是從你描述的內容來看,它不適合我。 DDD關於行爲而不僅僅是實體和值對象。

外部用戶可能通過WCF REST Api與您的域進行的交互與管理員可能具有的不一樣。因爲行爲可能不一樣。那麼對於我來說,從領域模型的角度來看,你必須模擬你試圖解決的每個問題(WCF和管理員)。所以有兩種模式。

在DDD中,不存在只有一個模型來處理或業務問題。

但是,如果你的域只是一個持久性(啞實體)的抽象,你可以在兩個項目中使用它。但即使如此,我還是會創建兩個不同的模型來避免部署問題,並且根據上下文,您可能不會始終使用相同的實體。

這只是我對此的承擔。

+0

我會在這種情況下反對兩種模式,因爲它似乎兩個服務之間的中心區別並不在於行爲,而是在暴露的操作範圍內。 – eulerfx

+0

的確如此,公共服務只負責以正確格式(JSON)轉換數據。 –