2016-12-20 115 views
4

我是DDD世界的新手,我想用ADO.NET將它應用到我們的DDD應用程序中。 DDD中有實體,聚合根,值對象。我有兩個實體,例如可能屬於幾個類別的博客帖子。其實我覺得博客帖子和類別都應該是聚合根。博客文章和類別都有一個存儲庫,PostRepository和CategoryRepository,但現在我對如何實現post和category實體之間1:many關係的持久性感到困惑。DDD如何保存實體之間的關係?

在DAO模式中,有一個DAO對應一個表,我們可以在DAO類中保留這個關係。但是在DDD中,有工作單元的概念,它可以正確地確保聚合根工作,像這樣,應該有一些關於聚合根實體的存儲庫。但對於這種關係我不認爲它應該有一個存儲庫,它不是一個實體。

是否有解決這些情況的最佳做法?或者我應該添加兩個過程(添加帖子,添加類別),並在保存帖子時調用它們?

+0

[DAO和Repository模式有什麼區別?](http://stackoverflow.com/questions/8550124/what-is-the-difference-between-dao-and-repository-patterns) – guillaume31

回答

2

每個聚合根目錄應該有一個存儲庫。

如果你考慮對象的結構,比如你的文章,那麼聚合就是帶有類別的文章。郵政將是聚合根。如果一個實體是獨立存在的,你可以把它看作是一個聚合根(它只是一個對象的集合)。因此,您創建存儲庫的規則是每個聚合根(或一個對象的單個實體)的規則。

如果您將「類別」作爲「帖子」聚合的一部分,則不得直接訪問或修改類別。如果類別需要更改,則通過Post對象完成。如果這聽起來不像您的域模型,並且您在考慮「但我想單獨管理我的類別」,那麼Category很可能不屬於Post聚合。如果不是,你可能想要將Category作爲自己的實體建模,並通過Post實體的id(不是對象引用)引用它。

然後你如何去模型分類取決於你自己的域。 DDD會發生這種情況。但都很好。這僅僅意味着你對域的建模方式完全取決於你的特定域的工作方式。

+0

謝謝阿德里安,在這裏我將分開管理這個類別。我使用表格來存儲帖子所屬類別的關係,在具有實體框架的DDD中,它將自動完成,如果沒有ORM,是否有優雅的模式來保存帖子及其類別? – RonSmith

+0

您可以使用ADO.NET之類的東西,首先刪除現有鏈接,然後重新插入它們。 –