2015-09-06 87 views
0

我檢查了這些帖子,但沒有找到一個合適的答案:如何建立基於元數據CQRS查詢不違反命令和查詢側的分離

CQRS: Read model built on demand?

CQRS - The query side

CQRS: business logic on the query side

我被基於CQRS的架構困住了。我知道查詢端應該有一個精簡的數據訪問層,但在我的項目中,我需要根據來自其他域對象的元數據調整查詢。

在互聯網上的幾篇文章中,報表數據庫中每個視圖都有一個表。因此,像'SELECT * FROM Tablename WHERE ...'這樣的SQL命令就是您所需要的。這在這裏不合適,因爲查詢返回的列應該是可定製的(通過列過濾器)。

這應該工作如下:

  1. 查詢由客戶機調用,含有行的過濾器ID(WHERE部分)以及用於列另一個過濾器ID(SELECT部分​​)。
  2. 的QueryHandler建立了基於基於兩個濾波器
  3. 查詢是針對數據庫執行,並將結果返回給客戶端

的ID域服務中提取信息的SQL查詢什麼我很苦惱的是在步驟2中的域服務的依賴。對我來說,這感覺應該不是,因爲查詢和命令端之間的分離。

這是一個可以接受的方式來處理這個問題,還是有另一種方法分隔雙方?

回答

0

我認爲Dennis's answer在第三個鏈接的問題中給出的可能是最好的 - 報告可以是與其他域名不同的有界上下文。如果您可以爭辯說,您的存儲過濾器與主域名是分開的,那麼您仍然保持該主域名的分離。

你的閱讀方有一些邏輯不是問題。在這種情況下,你不會改變你要返回的數據的含義。您尚未獲得硬編碼的主域的業務邏輯。你擁有的邏輯是不同的有界上下文的一部分,你不一定用CQRS建模(甚至CQRS的最大支持者也會告訴你,你不應該在任何地方使用CQRS)。