python入門python的基本語法
1079
2025-03-31
隨著數字化世界的持續演進,軟件架構設計思想在碰撞中不斷優化。云原生時代的到來,加速了行業對于領域驅動設計理念(Domain-Driven Design)的實踐落地訴求。
在剛剛結束的DDDChina2021領域驅動設計峰會上,華為云數據建模架構師凌云分享了自己對領域驅動設計理念的理解和實踐。
軟件架構的演進
近些年隨著經濟和科技的迅猛發展,各行各業或多或少都有軟件系統的應用,電商、銀行等行業的迅速發展帶來的業務復雜度提升、訪問并發量提高,都對軟件的可靠性、穩定性提出了更高的要求。因此軟件架構在近些年經歷了從單體架構、到分布式架構、再到目前比較主流的微服務架構,以及逐漸興起的Serverless架構的演進過程。
什么是領域驅動設計思想(DDD)呢?
DDD的全稱為Domain-Driven Design,即領域驅動設計,是在一定領域內,發現問題,抽象共性不變的流程,進而提供問題解決方案的過程。它的方法是通過一個統一語言領域建模、領域劃分等一系列手段來降低復雜度,并基于面向對象分析(OOP)技術進行了分層規劃,對軟件開發全生命周期使用語言進行統一,并強調業務與技術相結合的一種過程。
-為什么要建模?
建模通過可視化的模型,讓懂業務的人和懂技術的人可以互相交流溝通。同時,我們做了一個模型之后可以很方便的復用傳播,在其它項目中進行改造,最后還可以對做出的決策進行文檔化。
-什么是“領域”模型?
領域的邏輯就是顯性的專業知識。比如現在需要開發一款法務人員使用的軟件系統,那么就會存在這樣的問題:法務人員不懂軟件開發,開發人員不懂法律條文信息,而在開發過程中二者又需要進行不斷的溝通和確認,法律領域的模型就是連接二者的一個橋梁,領域模型主要傾向于將領域的知識給描述出來,管理合規性。
-領域建模和軟件架構的關系
概念
作用
抽象定義
具體定義
領域驅動
發現問題
就是在一定業務范圍內,抽象提取出具有共通性的,不會改變的具有內在邏輯流程的思維活動
構建領域模型
架構設計
解決問題
靈活運用設計模式,代碼實現抽象出來的業務邏輯流程
構建系統框架
DDD如何落地
下面通過一個具體的數據建模軟件的案例來給大家說明一下如何落地DDD。
以一款數據建模軟件開發為例,邏輯模型和物理模型如下圖:
邏輯模型
物理模型
我們可以通過如下步驟實現DDD的落地:
與領域專家交流
與領域專家交流是整個流程的重中之重,在該過程中業務建模人員需要對概念、操作、行為、約束等較為熟悉,因此,領域建模的第一步,是明確業務邊界,將系統的所有行為收縮到可視化建模子領域以內。其次需要理解數據變化的邏輯,在可視化建模的概念-邏輯-物理正向設計過程中,概念驅動邏輯,邏輯驅動物理,針對不同角色的用戶,所關注的階段并不同。從業務角度看,實體變更將驅動表變化;從用戶角度看,業務邏輯變更要求系統演變適配。最后與領域專家驗證需求,正向推送邏輯:實體變更審核通過,則驅動對應表發生變化。此變化在物理模型上,開發者應根據表的變更,修改軟件系統的實現。
實現對應的領域模型
合理規劃業務對象的關系、繼承,實體包含屬性、表包含字段、表包含索引、關系關聯兩個實體、ER圖包含實體、關系等。確定聚合關系,實體頭信息和屬性列表構成實體、表頭信息和字段列表+索引列表構成表、版本狀態與流程構成版本化。接下來需要確定值對象,如字段類型、索引類型、操作動作類型等,最后領域模型驗證需求,通過以上的流程我們實現了一個領域模型,如下圖:
設計原型界面和交互邏輯
實現對應的一個領域模型,接下來設計原型界面和交互邏輯,交互邏輯可以理解為這個領域模型的各種事件、事件驅動。
領域模型自動生成結構框架代碼
通過領域模型構建的UML圖可直接生成項目框架代碼,在框架代碼中會生成相應的實體類,以及各種事件也生成了相應的event代碼。
UML圖自動生成框架代碼
在框架中進行細化和優化
代碼框架可以直接使用,如果還需要擴展其它的內容,比如除了增刪改以外,還希望具有查詢歷史版本的功能,這種event在領域圖上難以表達,或者是表達了之后生成的也不一定準確,所以這種情況的代碼需要軟件開發者來編寫。但是已經不需要再關注那些框架性的接口或者服務層的問題了,只需要在相應的地方,對特性能力進行增強即可。
通過以上步驟完成的建模軟件系統落地, 既能自動生成代碼又能做好看護,保持架構與DDD模型的一致性。
通過以上講解,您對領域驅動設計(DDD)理念有初步的了解了嗎?任何理念的應用都需要深入的體會和反復的實踐,希望本文能給大家一些啟發和幫助。
上云必讀 云原生 架構設計
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。