1

我有以下Onion Architecture框架。與洋蔥架構DDD有界上下文

  • Domain
    • Entities - 我的域實體
    • Interfaces - 我的域接口
    • Services - 對於我的域名服務
  • Infrastructure
    • Data - 對於Fluent NHibernate持久
    • Interfaces - 對基礎設施的接口
    • Logging - 在登錄的情況下只是一個接口,我想我的日誌庫轉出到別的東西。
    • Dependency Resolution - 我的IoC註冊大部分都在這裏。
  • Services
    • Interfaces - 應用服務接口進入這裏,他們將在UI項目得到實施。
  • Tests
    • Infrastructure Tests - 出於測試的基礎設施服務等
    • Domain Tests - 用於測試域模型和服務
  • Web
    • UI - 用戶界面項目中,我實現應用服務,用戶界面等...

隨着Domain Driven Development人會識別Bounded Contexts。大多數互聯網上的文獻都指出,每個Bounded Context都需要抽象到他們自己的項目或名稱空間中。

  1. 是我的方法不正確,然後對具有所有我在一個項目和Domain Models我在另一個項目Domain Services呢?在不同的命名空間或項目中沒有不同的有界上下文是否真的很重要?
  2. 如果您有使用我Bounded Context A一個Model A,但Bounded Context BBounded Context C等也需要使用完全相同的Model A,你允許他們使用的是完全相同的模型,還是你創建的每個Bounded Context新模式?

我是DDD的新手,所以很抱歉,如果這個問題是一個愚蠢的問題。如果我提出一個問題並作爲答案得到一個好的解釋,我發現自己更好地理解了一些東西。

任何幫助將不勝感激。

回答

6

我的方法對於將一個項目中的所有域模型和另一個項目中的所有域服務都設爲不正確?在不同的命名空間或項目中沒有不同的有界上下文是否真的很重要?

  1. 不同的命名空間是一個概念性的一個實用的解決方案,否則你可以有實體名稱衝突時,兩個相鄰的概念在不同的子域去同名。

    除此之外,不同的項目/解決方案更多的是組織選擇。如果單獨的團隊在BC上工作,它會讓事情變得更容易,而單獨的二進制代表BC可以更獨立地部署。

如果你有一個A型這是用我有限背景信息,但限界上下文B,限界上下文C等也需要使用相同的A型,你允許他們使用完全相同的模型,還是爲每個有界上下文創建一個新模型?

  • 它需要一些更多的域分析說,但有界上下文的整點是能夠從完全不同的角度觀看的東西。在當

    • 完全相同的實體用於在3個不同的卑詩省
    • 你沒有看到他們發展他們自己的方式在未來
    • 實體似乎並不在自然屬於罕見病例給定BC
  • ,那麼你可能需要使用共享內核模式。否則,只需複製每個BC中的實體,讓這些實體自己的生活,或找到實體的真正的BC,並鏈接到其他BC的ID。

    +2

    是的,我肯定會創建3個不同的模型。 BC 1,2和3可能在「Model A」背後共享相同的概念,但它將用於應用程序的不同部分。繪製一個簡單的[上下文映射](http://www.infoq.com/articles/ddd-contextmapping)將幫助您可視化模型交互以及BC之間發生的事情。 – MaxSC

    +0

    謝謝你現在的解釋。只是在這個問題上有一個問題,持久性與3個'有界的上下文'中的'Model A'相關,你會有3個不同的映射文件,將每個上下文模型綁定到它自己的表,還是有1個映射文件? –

    +0

    好吧,我也會用3個不同的映射文件。想想_Customer_的概念。根據上下文,它可能是_prospective customer_,_customer_或_client_。這三款車型有着相同的想法,但絕對不會共享相同的屬性。沒有好的獨特模型,沒有典範模型。 DDD使我們有能力創建儘可能多的模型,因爲我們有不同的環境。但他們顯然會與模型通過上下文共享相同的ID。 – MaxSC

    相關問題