有許多類型的軟件、軟件開發(fā)合同的類型和軟件設(shè)計(jì)模式的類型。在軟件設(shè)計(jì)中避免挫折和保持數(shù)據(jù)流移動(dòng)的關(guān)鍵是簡(jiǎn)單。保持工作簡(jiǎn)單的一個(gè)重要部分是明確架構(gòu)中每個(gè)數(shù)據(jù)段的職責(zé)。
對(duì)于將應(yīng)用程序作為業(yè)務(wù)模型的一部分進(jìn)行構(gòu)建和維護(hù)時(shí)尤其如此。這就是 CQRS 數(shù)據(jù)模式作為傳統(tǒng) CRUD 模式的替代方案的用武之地。但是,什么是 CQRS,如何使用它?在本文中,我們將詳細(xì)了解這一點(diǎn),并為您提供一些避免一些常見錯(cuò)誤的建議。
什么是 CQRS?
CQRS 是用于命令查詢職責(zé)分離模式的行業(yè)簡(jiǎn)寫。這意味著 CQRS 模式是分離查詢和命令的軟件設(shè)計(jì)模式。它們通常用于云中的數(shù)據(jù)存儲(chǔ)應(yīng)用程序。簡(jiǎn)而言之,就是“什么是 CQRS?”這個(gè)問題的答案。是 CQRS 數(shù)據(jù)模式將寫入和讀取數(shù)據(jù)的操作分開。
- 查詢:讀取新數(shù)據(jù)的函數(shù)
- 命令:寫入或更新數(shù)據(jù)的函數(shù)
實(shí)際上,命令會(huì)轉(zhuǎn)化為應(yīng)用程序服務(wù)器中的動(dòng)作,并且總是寫成命令式動(dòng)作動(dòng)詞。例如,提供虛擬呼叫中心服務(wù)的企業(yè)可能需要命令代碼來指示應(yīng)用服務(wù)器{刪除}舊數(shù)據(jù)或{安裝}新插件。查詢通常讀取、處理和傳輸數(shù)據(jù)以供顯示。它們使命令成為可能,因?yàn)樗鼈冏x取命令寫入的數(shù)據(jù)并適當(dāng)?shù)剞D(zhuǎn)換它。
通常使用 CQRS 數(shù)據(jù)模式來代替稱為創(chuàng)建、讀取、更新和刪除或 CRUD 的傳統(tǒng)系統(tǒng)。這是一種更簡(jiǎn)單的數(shù)據(jù)處理方式,通常應(yīng)用作第一個(gè)停靠點(diǎn),但并不適合所有業(yè)務(wù)。您應(yīng)該問自己“什么是 CQRS?” 如果您的應(yīng)用程序正在考慮定期擴(kuò)展或需要頻繁更新,請(qǐng)對(duì)其進(jìn)行調(diào)查。
為什么使用 CQRS 模式?
大多數(shù)傳統(tǒng)軟件系統(tǒng)使用相同的數(shù)據(jù)模型來寫入和讀取數(shù)據(jù)。這對(duì)于簡(jiǎn)單的系統(tǒng)可以很好地工作,但是隨著系統(tǒng)變得越來越復(fù)雜,您可能會(huì)發(fā)現(xiàn)您很難控制和跟蹤您的數(shù)據(jù)集。
這些是傳統(tǒng)數(shù)據(jù)模型可能導(dǎo)致復(fù)雜數(shù)據(jù)存儲(chǔ)出現(xiàn)問題的一些方式:
- 不同的解釋:查詢和命令功能可能會(huì)導(dǎo)致對(duì)相同數(shù)據(jù)的不同解釋,并導(dǎo)致數(shù)據(jù)流中斷。
- 數(shù)據(jù)爭(zhēng)用:如果同時(shí)對(duì)同一個(gè)集合執(zhí)行多個(gè)操作,數(shù)據(jù)可能會(huì)變得混亂。
- 安全性:數(shù)據(jù)片段在同一個(gè)集合中同時(shí)受到讀取和寫入過程的影響,這帶來了錯(cuò)誤暴露數(shù)據(jù)的可能性。
CQRS 模式的主要好處之一來自事件溯源。
通過單獨(dú)的查詢和命令操作,創(chuàng)建服務(wù)器所有更改的時(shí)間日志并在發(fā)生嚴(yán)重錯(cuò)誤時(shí)重建過去的狀態(tài)要簡(jiǎn)單得多。其他好處包括:
- 擴(kuò)大用戶訪問: CQRS 數(shù)據(jù)模式對(duì)于許多用戶同時(shí)訪問和處理它的數(shù)據(jù)集非常有用。它可以最大限度地減少合并數(shù)據(jù)的沖突,并允許多個(gè)用戶同時(shí)更改數(shù)據(jù),從而提高生產(chǎn)力并避免工作流程中斷。
- 讀/寫不平衡:數(shù)據(jù)的讀取頻率通常比寫入頻率高得多。CQRS 數(shù)據(jù)模式允許您擴(kuò)展讀取數(shù)據(jù)流程,同時(shí)在您需要考慮較大不平衡的情況下保持寫入數(shù)據(jù)流程相同。
- 緊跟行業(yè)法規(guī):由于數(shù)據(jù)共享和泄漏的可能性,技術(shù)行業(yè)法規(guī)經(jīng)常更新。通過能夠?qū)ο到y(tǒng)進(jìn)行快速更新,您可以確保在操作時(shí)始終遵守這些規(guī)則。
嘗試通過軟件出版物了解數(shù)據(jù)自動(dòng)化和模式領(lǐng)域的最新發(fā)展,并確保定期檢查您的技能。
要避免的常見錯(cuò)誤
任何軟件設(shè)計(jì)過程都有潛在的陷阱,特別是如果您以前沒有使用過這種模式。這些是您在使用 CQRS 模式時(shí)可能犯的一些更常見的錯(cuò)誤,以及如何避免這些錯(cuò)誤。
1. 期望太多
CQRS 模式是有用的工具,但它們并不是萬能的解決方案。它們可能很復(fù)雜,并且需要高水平的專業(yè)知識(shí)才能正確管理。它們只應(yīng)在某些情況下使用,以確保您從努力中獲得最佳結(jié)果。這些情況是您可以成功使用 CQRS 模式的情況:
- 您的系統(tǒng)經(jīng)常發(fā)展或使用頻繁更新——這非常重要,否則系統(tǒng)可能會(huì)變得過于復(fù)雜并導(dǎo)致過多的陳舊數(shù)據(jù)。
- 您正在努力使用其他模式方法進(jìn)行擴(kuò)展
- 您的域是面向查詢的
- 您與其他團(tuán)隊(duì)或服務(wù)器協(xié)作
- 您有能力存儲(chǔ)過時(shí)的數(shù)據(jù)
解決方案:幸運(yùn)的是,這里的解決方案只是知道何時(shí)將 CQRS 模式應(yīng)用于您的軟件,以及何時(shí)其他解決方案會(huì)更好。
2. 過時(shí)的數(shù)據(jù)
當(dāng)涉及到 CQRS 數(shù)據(jù)模式時(shí),陳舊的數(shù)據(jù)可能是一個(gè)問題。如果您不熟悉這個(gè)概念,那么陳舊數(shù)據(jù)就是在讀取和處理數(shù)據(jù)然后以某種方式更改時(shí)發(fā)生的情況。當(dāng)系統(tǒng)試圖檢索處理過的數(shù)據(jù)并且只能檢索到數(shù)據(jù)的舊配置時(shí),這被稱為陳舊數(shù)據(jù)。由于命令和查詢功能已在 CQRS 模式中分離,因此讀取的數(shù)據(jù)可能不會(huì)更新,最終可能會(huì)過時(shí)。為避免這種情況,請(qǐng)確保在寫入數(shù)據(jù)的同時(shí)更新讀取數(shù)據(jù)。
3. 復(fù)雜性
CQRS 系統(tǒng)可以解決傳統(tǒng)數(shù)據(jù)模式引發(fā)的許多不同問題。但是,它們也可能導(dǎo)致復(fù)雜性增加。如果您的系統(tǒng)包含事件溯源模式,則尤其如此。在這種情況下,事件/更新序列通常會(huì)代替實(shí)際寫入的數(shù)據(jù),這有助于優(yōu)化性能。讀取的數(shù)據(jù)被轉(zhuǎn)換為存儲(chǔ)在讀取數(shù)據(jù)存儲(chǔ)中的數(shù)據(jù)的物化視圖。您可能會(huì)在此處遇到的問題之一是最終一致性。系統(tǒng)的復(fù)雜性意味著在生成事件序列和相應(yīng)更新數(shù)據(jù)之間最初會(huì)有延遲。為避免復(fù)雜性成為問題,請(qǐng)確保在更新數(shù)據(jù)和檢查存儲(chǔ)中是否存在故障和數(shù)據(jù)丟失時(shí)保持一致。
4. 不必要的更新
您應(yīng)該在考慮實(shí)施 CQRS 的每個(gè)階段的必要性。CQRS最需要持續(xù)更新的數(shù)據(jù),例如與未來集設(shè)備和設(shè)備的平臺(tái)或應(yīng)用程序。如果您的企業(yè)數(shù)據(jù)不是您的,最好升級(jí)傳統(tǒng)模型。您可能在不知不覺中需要 CRS ,例如,發(fā)現(xiàn)需要比計(jì)劃的傳統(tǒng)方式您更可能考慮應(yīng)用程序服務(wù)器的數(shù)據(jù)。已獲得 ISO 認(rèn)證的類似企業(yè)的應(yīng)用程序中存在明顯的任何問題。
如果您的程序,Google的時(shí)間和頻率可以分析其他類型的數(shù)據(jù)或分析,您可以使用更準(zhǔn)確的方法來收集您的應(yīng)用程序,例如,您可以使用其他方法來顯示您的目標(biāo)。 CQRS 允許地區(qū)的最更新的區(qū)域。
5. 通信不暢
最后,快速提醒溝通!CQRS 模式實(shí)施起來可能很復(fù)雜,并且需要大量的團(tuán)隊(duì)合作,因此請(qǐng)記住讓您的團(tuán)隊(duì)了解您正在做的事情。您需要能夠向您的團(tuán)隊(duì)解釋 CQRS 是什么以及如何集成它。
維護(hù)您的通信基礎(chǔ)設(shè)施是其中的關(guān)鍵,特別是對(duì)于可能缺乏大型企業(yè)財(cái)務(wù)資本的小型企業(yè)。了解適合小型企業(yè)的最佳多線電話系統(tǒng)以及存儲(chǔ)計(jì)劃和進(jìn)度的最佳方式都是軟件設(shè)計(jì)團(tuán)隊(duì)實(shí)現(xiàn)頂級(jí)溝通的重要第一步!