2010-12-20 36 views
3

我一直在閱讀CQRS,並發現許多有價值的原則。但是,我有一個主要觀點。許多人談論讀取模型查詢直接地查看模型dtos。到現在爲止還挺好。但是,「一張桌子還是一張選擇桌子」是從哪裏來的?當然,一些屏幕很容易映射到1-1。但我經常使用一些複雜的屏幕,涉及多個選擇,如下拉列表中的參考數據,小工具等...CQRS - 閱讀模型DTO混淆

我可以很容易地看到我的視圖需要多個選擇,也許一些連接或兩個。

你怎麼可能從完美世界場景中你的觀點很簡單,平坦的工作避免這種情況,除了?

回答

5

但我經常與一些複雜的 屏幕,將涉及多個 選擇喜歡的事情在下拉列表,窗口小部件等參考數據 工作...

選擇列表,窗口小部件等。你可以將它們看作是一個視圖,它們嵌套在另一個視圖中(如果它們已經是它們自己的部分,可能很明顯)。當以這種方式觀看時,他們可以分別擁有自己的查詢。

+0

有趣的觀點。說得通... – 2010-12-20 21:41:56

2

答案是一個問題:「?難道我非規範化我的看法可能不夠我已經預先計算我越能代表該信息更好,所以更小的疑問需要?」

爭取「1查看== 1查詢」。正如qstarin所述,查看!=屏幕。

1

,在我所合作過的場景中,我們使用一個視圖緩存是我們希望渲染對象的預先計算的看法。即使事件(我們正在使用EDA)來自不同的域,我們也有處理程序來維護視圖緩存,以便我們能夠以適合複合UI的狀態呈現我們希望呈現的信息。我們追求的目標是讓「select *」或「select * where ID =」成爲針對視圖緩存的唯一查詢形式。有些頁面有多個DTO被渲染,但我們不必加入它們。如果我們覺得需要加入,我們在預計算階段就會這樣做,當我們處理包含我們希望存儲在視圖緩存中的信息的消息時。

0

可以使用Denormalization避免這種情況。你應該讓所有複雜的數據成爲一個平面視圖(無連接)。 也請看First normal form (1NF or Minimal Form)

在CQRS它是用來做讀一邊以最快的速度和簡單越好。因此它可以水平縮放。