2009-05-05 102 views
4

這只是一個例子。DDD爲不同的上下文邊界保存「相同」實體

假設您有2個實體用於2個不同的上下文邊界。第一個上下文是SkillContexter,該實體是「玩家」並具有3個屬性:Id,Name和SkillLevel。在另一個上下文(Contactcontext)中,實體是「玩家」並具有3個屬性:Id,Name和EMail。

如何將這些實體持久化到數據庫?我只想要一個表(Player)而不是兩個表(PlayerContact,PlayerSkill)。我應該有兩個不同的儲存庫用於保存不同的上下文實體,但放到同一個表中嗎?或者我應該擁有一個擁有我需要保存的所有屬性的「主」玩家實體,以便創建一個名爲PlayerMaster的新實體,該實體具有4個屬性:Id,Name,EMail和SkillLevel?

第一個解決方案給了我更多的存儲庫,第二個解決方案使我成爲一個「技術」實體,只有目的是將數據保存到數據庫,這感覺真的錯了,還是有更好的解決方案,我錯過了?

你們是怎麼解決它的?

回答

0

我不太清楚你的意思的上下文邊界,所以我的答案可能是關閉的。

兩個玩家實體是否代表相同的物理實體(人)?如果是這樣,那麼我將創建一個具有全部四個屬性的單個Player實體,並將它們的數據存儲在一個表中。

5

當我第一次開始使用DDD時,我也與事物的上下文+域+模塊+模型組織摔跤。

DDD確實是一個建立域模型的指南。一旦我停止嘗試分解我的上下文和邊界,並開始思考實體之間真正共享的東西 - 事情開始更好地融合在一起。

我實際上不使用上下文,除非它是一個完全不同的應用程序(app = context)。只是我的偏好。但是,我確實有模塊,它們只共享代碼中的基本摘要和接口(IRepository,IComponent等)。 DDD表示,模塊可以在模塊之間共享實體 - 但只能在非常有限的範圍內(你確實不想經常這樣做)。我想,我會擺脫使用上下文並轉向「我真正想要完成什麼,這些模型有什麼共同之處)。下面是我會想到的,閱讀你的問題(如果我。瞭解他們)

Person() is a base entity. It has ID and Name. 

PlayerSkill() is a Value Object, that is 
accessable from Person().PlayerSkill. 

Contact() is an entity that inherits Person(), 
so it inherits ID and Name, and has additional Contact properties you want. 

現在,我只是撕毀您的域名我知道

可以使用HYBIRD方法,以及:。

Person() is a base entity. It has ID and Name. 

Player() inherits Person(), applies Skill() 
and other VOs. 

Contact() inherits Person(), applies Address() 
and other VOs. 
相關問題