2013-05-29 26 views
4

仍在深入研究CQRS實現實驗,並決定從頭開始重新啓動我的博客並將其用作沙盒。CQRS/DDD:虛擬博客/ post/category/tags示例

我讀了很多關於有界環境的知識,在我看來,這是所有這些方法中最微妙的方法,也許是解釋和應用於真實項目中最困難的事情。

幸運的是,在這裏我的域名是很簡單;-)

我試圖找出不同的限界上下文,並確定哪種模式成爲這三個方面的總根源。

域名規則很簡單:

  • 作家組成一個博客,他必須選擇一個類別救他中,他可以任選選擇多個標籤改善他的知名度

  • 讀者訪問的博客,他可以通過類別職位或標籤

由於只有這些規則瀏覽博客,我們已經得到一些界背景,是我對 ?

  • 用戶(作家)組成帖子上下文。在這種情況下,是聚合根

  • 用戶(讀者)按類別瀏覽帖子。在這種情況下,類別是聚合根。

  • 用戶(讀者)通過標籤瀏覽帖子。在這方面,好吧,我不確定... ;-)

我在想事情是對的嗎?

鑑於我是(正確),我想知道,在實現這個時,誰負責創建不同的對象和關係?

以用戶編寫新博客文章爲例,我真的沒有任何線索我應該在哪裏創建標記實例,以及我是否應該在Post和其標記之間創建關係寫模型。同樣的類別,不知道:p

此外,是否有界的上下文意味着一個特定的模型?這意味着對於每個有界的上下文,我會有一個不同的對象圖(在寫模型中)?

需要一些腦電波看到這個明顯的在我的腦海;-)

對於添加一個新的職位,到目前爲止,我的控制器詢問命令總線來處理「ComposeCommand」,處理程序(PostService)創建一個新的「Post」實例,在其上調用一個組合方法,並最終要求寫入持久性來保存新的Post。

Post :: compose()方法引發一個「PostComposedEvent」事件,讀取模型將偵聽它以更新其數據。

在這一切中,我不知道如何引入「類別」和「標籤」。

謝謝。

+1

「我在這裏的域名非常簡單」。在這種情況下,你可能只有1個有界的上下文。也許你錯誤地將有限上下文聚合起來? – Steven

回答

5

只有這些規則,我們已經得到了幾個有界的上下文,是我對 是嗎?

不,博客應用通常只會跨越一個有界的上下文。正是這些模型在不同的背景下具有不同的含義,所以你需要多個BC。這通常發生在您尋址的域有點大時由多個sub-domains組成。

但是,您將擁有多個聚合 - 您可以在一個BC中擁有多個聚合根。確定您的域模型中的聚合是基於幾個因素。首先,聚合形成圍繞與某個根實體相關聯的一組連貫行爲的一致性邊界。例如,郵政很可能是一個AR,作爲作家(作者)。要深入瞭解總體設計,請查看Effective Aggregate Design

在這一切我不知道如何引入「類別」和「標籤」。

通常情況下,一個職位的類別和一組標籤被指定爲它創建後命令的一部分 - 你的情況ComposeCommand。根據是否將類別和標籤建模爲聚合或值對象,該命令將指定一個類別標識標籤標識或簡單的值。

+0

好的,謝謝,我想我明白了,我從錯誤的角度看待它。我是從用戶體驗的角度思考的,而不是模型的真正「含義」,這是對的,在這裏保持不變,它實際上是聚合根的變化。關於類別和標籤的創建,我理解了值對象和對象引用之間的區別,我們應該儘量避免。我想知道哪些VOs或參考應該創建/ instanciated?在Post :: command()方法中?在命令處理程序中(也許有工廠?) – Benjamin

+0

感謝您的鏈接,現在閱讀;-) – Benjamin