由於一前一後(Architecture: simple CQS)的結果,我一直在想,我怎麼能建立一個簡單的系統,該系統可以靈活地後來擴展。換句話說:我現在看不到需要成熟的CQRS,但是如果需要的話,我希望以後能夠很容易地演化成它。建築問題
所以我就想來分隔查詢命令,但都基於相同的數據庫上。
查詢部分很簡單:基於視圖的WCF數據服務很容易查詢數據。沒有什麼特別的。
命令部分是更困難的事情,這裏有一個想法:命令當然是以異步方式執行的,所以它們不會返回結果。但是,我的ASP.NET MVC站點的控制器通常需要來自命令的反饋(例如,如果成員的註冊成功與否)。所以如果控制器發送一個命令,它也會生成一個與命令屬性一起傳遞的事務ID(一個guid)。命令服務接收到該命令,將其放入狀態爲「處理」的數據庫中的事務表中,並執行(使用DDD原則)。執行後,事務表被更新,以便狀態變爲「完成」或「失敗」,以及其他更詳細的信息,例如生成的主鍵。
與此同時,該網站正在使用QueryService來查詢此事務的狀態,直到它收到「已完成」或「失敗」,然後它可以基於此結果繼續其工作。如果事務表被輪詢並且結果「完成」或「失敗」,則該條目被刪除。
副作用是我不需要guid作爲我的實體的鍵,這對性能和大小來說是件好事。
在大多數情況下,可能不需要此輪詢機制,但如果需要的話是可能的。接口的設計考慮到CQS,所以對未來開放。
你認爲在這種方法的任何缺陷的?其他想法或建議?
謝謝!
路德
爲什麼要通過WCF數據服務來分離前端?是否有特定的原因,因爲我會盡可能簡單地保持我的解決方案。 – thekip
+1不參加WCF。 Fowler的第一個分佈式對象設計法:不要分發你的對象(來自PoEAA) – Deleted
+1 - 同意@Chris Smith –