CQRS

查詢 (Query)

上圖中,可以看到Query不是通過DB來查詢,而是通過一個專門用于查詢的Read DB(上圖中的Cache,它不一定是數(shù)據(jù)庫,但為方便起見,下面統(tǒng)稱Read DB),Read DB中的表(方便起見,暫且認(rèn)為這個Read DB是一個RDBMS)是專門針對UI優(yōu)化過的,例如里面可能會有LatestProductListModel(ProductId, ProductName, Price, BrandName, AddedTime)、BestSoldProductListModel(ProductId, ProductName, TotalSold)這樣的表,分別表示最新的產(chǎn)品列表,銷量最好的產(chǎn)品列表(它們其實就相當(dāng)于是View Model)。LatestProductListModel中有一個BrandName的字段,注意,不是BrandId,因此,對于界面中的查詢,幾乎全都可以通過SELECT * FROM [TABLE]這樣的SQL語句來實現(xiàn),可能有少數(shù)Where,但基本沒有Join,這對于界面的加載速度絕對是有利無弊的(其實也是在用空間換時間)。

命令 (Command)

業(yè)務(wù)邏輯大部分都發(fā)生在寫入的時候,例如用戶購買商品提交訂單時,我們要驗證庫存,用戶信息訂單數(shù)據(jù)是否有效等。如果從傳統(tǒng)DDD的角度看,Command類似于Application Service,用戶的命令(如提交訂單)會以Command的形式得到執(zhí)行,而Command中也不會帶有業(yè)務(wù)邏輯,Command中做的事情基本上是:通過Repository得到相關(guān)的領(lǐng)域?qū)ο?,調(diào)用某些領(lǐng)域服務(wù)(Domain Service)執(zhí)行一些操作(業(yè)務(wù)邏輯都將保留在領(lǐng)域模型中),然后執(zhí)行Commit或SaveChanges之類的方法提交改動,之后,相關(guān)的數(shù)據(jù)就會寫入到Write DB中(圖的DB,下文統(tǒng)稱Write DB)。需要注意的是,UI上的查詢都是查Read DB,而不是Write DB。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容