去哪兒網領域驅動設計(DDD)實踐之路
眾所周知,領域驅動設計(DDD)的概念出自Evic Evans的《領域驅動設計:軟體核心複雜性應對之道》。它是指透過統一語言、業務抽象、領域劃分和領域建模等一系列手段來控制軟體複雜度的方法論。
伴隨著微服務的興起,領域驅動設計(DDD)正在煥發青春,其價值被越來越多的業內人士重新發掘。那麼,DDD在國內的發展現狀如何?業務團隊要了解DDD,應該如何上手?帶著這些疑問,我們採訪了去哪兒網技術總監王植萌。
▲去哪兒網技術總監 王植萌
國內DDD的實施現狀
關於DDD的業務重塑,企業最關心的因素有三個方面:一、是否可以提升人效,降低整體成本;二、是否能夠指導系統架構快速適應組織架構與業務架構的變化,保證技術與業務不脫節;三、是否能夠促進產研融合,為業務的共同願景發力。
重塑DDD可以讓企業獲得一個非常有用的領域模型和更好的使用者體驗,清晰的模型邊界,以及更好的企業架構;企業業務得到更準確的定義和理解;領域專家可以為軟體設計做出貢獻;做出敏捷、迭代式和持續建模等。
即便DDD可以滿足企業的諸多需求,但是仍有許多朋友對其價值收益感受不明顯。其原因主要是DDD門檻高、概念多,體系龐大又抽象,再加上缺少實踐經驗和案例指導,很多開發人員對DDD望洋興嘆,面臨DDD落地難的困境。
王植萌認為,“經過一年多的專案實踐發現,DDD並不存在最佳實踐。它是一套體系與原則,針對不同型別的業務領域,DDD實踐方法和理念,以及資源投入的方式是不一樣的。很多書本上都沒有描述,需要透過實踐來摸索總結。”
去哪兒網DDD的實踐
在去年疫情時期,去哪兒網的高層提出“練內功”的理念。所謂,練內功的要義就是要讓技術架構適應業務與組織結構的變化。當組織結構發生巨大的變化時,產研之間需要迅速融合產生競爭力。當發生較大的人員變動時,產研雙方都有重新理解業務、梳理業務達成對業務領域一致認知的願望。
早在2013年,去哪兒網就落地了敏捷開發。而DDD的理念與敏捷開發、極限程式設計的理念一脈相承。可以說,在DDD之前,敏捷開發是去哪兒網實現產研融合的重要方法,只是DDD體系要比敏捷開發更為完善和厚重。所以,去哪兒網選擇在專案中落地DDD。
在落地DDD的過程中,去哪兒網也面臨著重重困境。沒有與產品樹立共同願景,共同做戰略設計的習慣,導致產研雙方無法實現共同願景,從而導致DDD做成了一次消耗更多人力的技術重構。此外,事件風暴需要反覆做,但是用紙來保持事件風暴資訊容易丟失且成本高昂。
為了解決這些問題,去哪兒網採用BeeArt的工具,來做事件風暴結果儲存的工具,保證了事件風暴結果可分版本的儲存與使用,大幅度提升了事件風暴的質量,提高了DDD實踐的成功率。
對於DDD業務重塑完成後,如何保持領域不被外部入侵?王植萌表示,“我們透過標準化API的方式,去哪兒網實現了一套標準的API接入規範和工具,有效保證了API對於限界上下文邊界的隔離性,防止限界上下文被入侵。”
DDD的成功落地給去哪兒網帶來最直觀的價值是:去哪兒網從整體上開始重視設計工作,細化設計的流程。增進了產研間的互信,雙方對需求的工時預期趨於一致,對於需求的錯誤理解大大減少。在解決複雜度高的問題時,DDD給予了非常必要的理論指導,能夠解決複雜領域中不易釐清的不合理架構,並加以改進。
總的來看,去哪兒網DDD實踐成功後,整體上增加了領域專家,提高了產研溝通效率,響應速度也逐漸變快。在技術側,去哪兒網掌握了業務的核心玩法,計算過程趨於標準化。在產品側,去哪兒網專注業務策略,解決了已有的痛點。在運營側,整個業務過程視覺化,提升問題的處理效率,減少需要反饋的問題。
如何快速上手DDD?
業務團隊可以先從工作坊,包括Event Storming或Domain StoryTelling著手,感受DDD帶來的好處。然後,再研讀DDD戰略的部分資訊,並且最佳化和整合到自己的業務知識庫裡,理解如何更好地將自身業務知識傳遞給團隊,從而降低團隊間的溝通成本,提高協作效率。
關於上手DDD的書籍,王植萌推薦了歐創新老師的《中臺架構與實現-基於DDD和微服務》,並作出很高的評價,“這本書是近些年來,DDD領域的一部佳作。它將DDD所涉及的疆域由與產品的共同願景,一直延伸到具體的程式碼落地實現,是一部縱貫全域性的劃時代的作品。”
王植萌指出,有興趣在DDD領域有所發展的架構師可以花7~8個小時閱讀《領域驅動設計精粹》一書,然後再上B站去哪兒網的Qunar技術大本營,找到去哪兒網的系列教學影片進行學習,其中有手把手的掛盤講解事件風暴過程的環節,下一步就是要親自做一次DDD思想指導的業務重塑。
寫在最後
透過去哪兒網的實踐證明,DDD完全可以高成功率的落地。隨著教材質量的提升、工具的逐步完善、實踐經驗的不斷積累,DDD一定可以在國內加速發展。
在即將到來的第十三屆中國系統架構師大會(SACC2021)上,王植萌將作為“DDD領域驅動設計專場”的出品人,為大家帶來去哪兒網實際的DDD業務重塑案例,包括實踐中和實踐後的思考,期待能給聽眾朋友們帶來啟發與幫助。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31545816/viewspace-2771469/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 領域驅動設計(DDD)實踐之路(一)
- 領域驅動設計(DDD)實踐之路(二):事件驅動與CQRS事件
- DDD領域驅動設計:領域事件事件
- DDD領域驅動設計pdf
- 領域驅動設計DDD和CQRS架構模式落地實踐架構模式
- 領域驅動設計的DDD與ddd - nick
- DDD-領域驅動設計示例
- 淺談DDD(領域驅動設計)
- 淺談 DDD 領域驅動設計
- DDD領域驅動設計:倉儲
- dayatang/dddlib:DDD領域驅動設計庫
- DDD-領域驅動設計簡談
- 領域驅動設計(DDD)入門&概要
- 領域驅動設計 (DDD) 簡介 - jannikwempe
- 什麼是領域驅動設計(DDD)?- mathias
- 領域驅動設計(DDD)高手養成記
- 領域驅動設計實踐——驗證(一)
- 領域驅動模型DDD(二)——領域事件的訂閱/釋出實踐模型事件
- 【DDD】《如何運用領域驅動設計》彙總
- 領域驅動設計最佳實踐--程式碼篇
- EntityFramework之領域驅動設計實踐介紹Framework
- 什麼是DDD領域驅動設計的戰略設計?
- 什麼是DDD領域驅動設計的戰術設計?
- 實現領域驅動設計
- 聊一聊中臺和DDD(領域驅動設計)
- 領域驅動設計實踐:支付系統建模 - Xiao
- 領域驅動設計(DDD)中模型的重要性 - Jeronimo模型
- DDD領域驅動設計總結和C#程式碼示例C#
- 什麼是DDD領域驅動設計的統一語言?
- MasaFramework -- 領域驅動設計Framework
- 領域驅動設計示例
- 理解領域驅動設計
- 微服務與領域驅動設計,架構實踐總結微服務架構
- ABP與DDD領域驅動關係
- 業務瘦身42%+效率提升50% :去哪兒網業務重構DDD落地實踐
- 一張圖解釋DDD領域驅動設計的戰術概念圖解
- 領域驅動設計DDD不具備大規模落地的條件!
- DDD社群權威解讀:2020年之領域驅動設計 - ziobrando