本系列所有文章 如何一步一步用DDD設計一個電商網站(一)—— 先理解核心概念 如何一步一步用DDD設計一個電商網站(二)—— 項目架構 如何一步一步用DDD設計一個電商網站(三)—— 初涉核心域 如何一步一步用DDD設計一個電商網站(四)—— 把商品賣給用戶 如何一步一步用DDD設計一個電商網站( ...
本系列所有文章
如何一步一步用DDD設計一個電商網站(一)—— 先理解核心概念
如何一步一步用DDD設計一個電商網站(四)—— 把商品賣給用戶
如何一步一步用DDD設計一個電商網站(五)—— 停下腳步,重新出發
如何一步一步用DDD設計一個電商網站(六)—— 給購物車加點料,集成售價上下文
如何一步一步用DDD設計一個電商網站(七)—— 實現售價上下文
如何一步一步用DDD設計一個電商網站(八)—— 會員價的集成
如何一步一步用DDD設計一個電商網站(九)—— 小心陷入值對象持久化的坑
如何一步一步用DDD設計一個電商網站(十)—— 一個完整的購物車
如何一步一步用DDD設計一個電商網站(十一)—— 最後的準備
如何一步一步用DDD設計一個電商網站(十二)—— 提交並生成訂單
如何一步一步用DDD設計一個電商網站(十三)—— 領域事件擴展
如何一步一步用DDD設計一個電商網站(十四)—— 領域事件擴展
閱讀目錄
一、前言
這是本系列的最後一篇了,後續可能會有一些關於DDD方面新的想法和問題的解決過程的文章,會另起標題來寫。所以這篇就把之前的幾篇回顧一下,也算是對自己這3個月的內容做一個總結,對之前的幾篇都有看過的童鞋可以跳過本篇。
二、故事的開始
這次的這個系列是自己給自己定下的一個目標,還是下了比較大的決心的。因為在我看來,不管是技術方案也好還是設計方案也好,DDD的價值並不局限於在它本身,它是一種抽象能力和思維方式的很好的鍛煉。還是那句話,我一直相信的是,做好了DDD,是成為一個合格的架構師的必要非充分條件。所以一是想把自己這幾年用DDD進行實戰過程中的一些收穫的總結並由各位來檢驗,二是希望自己的一些經驗可以幫助到更多的人來學習DDD。於是從16年10月底開始就決定每周一更本系列的博文,直到現在。
三、回顧
第一篇中主要講了一些概念性的東西,並且結合本系列的Demo設計場景,先梳理出了整個上下文映射圖。這一篇我覺得每個人都應該在實踐過程中有必要不斷的進行回顧並思考其中的邊界劃分是否合理等問題,需要做出更符合當前背景的設計。
第二篇開始就進入實戰了,主要內容是列舉了幾種比較常見的分層方式,並且把整個Demo中的項目分層確定了下來。我想這篇可以給一些準備入門的朋友們做為一個起點,一個可以把DDD落地到手頭項目中的起點。
第三篇主要講述了在核心域中的幾個領域對象的建模,和與不同上下文的交互方式的設計。其實該篇的目的更多的是把前2篇中講的一些概念性的東西以代碼的形式表現出來,而恰恰這些是我們實際編碼過程中需要耗費精力最大的地方,因為領域對象的建模是否合理,很大程度影響了整個項目的複雜度。
第四篇開始引入了領域服務和應用服務,並且通過代碼的方式來體現出了2者的區別,這也是比較容易混淆的一部分概念,可能有些朋友會傻傻分不清楚某些代碼到底應該放在哪裡去寫。記住:應用服務負責協調,領域服務則應該是某些不屬於任何領域對象的業務操作的體現。
第五篇內容相對較少,主要是引入了單元測試和對各位園友提出的一些意見進行改進。
第六篇開始引入了一個新的上下文,然後講述了幾種常見的集成方式,並且選擇了其中的一種來具體實現。在實現的過程中,建議貫徹好六邊形架構的設計思想,做好防腐層的設計,以保證內聚的領域對象不被破壞。
第七、八篇從技術角度來看並沒有增加新的東西,更多的是一種對領域對象進行建模的過程中筆者的一個習慣和方式,並且用代碼來表現出來。更多的是對業務的實現。
第九篇主要闡述的是倉儲層的設計,以及在不同的存儲方案中的技術支持。本文以實戰為主,舉了2個常見的場景和4種解決方案,並且選擇其中一種進行了實現。我想這篇還是比較有價值的,可以給大家多一些借鑒價值。
第十篇還是業務上的補缺和完善,業務主導的一篇內容。
第十一篇其實更多的是為第十二篇打鋪墊。
第十二篇從技術角度來看引入了較多的東西:領域事件、領域事件的發佈、和在多個上下文之間集成會遇到的問題和解決方案,並且進行了代碼實現。
第十三篇是對第十二篇放到分散式場景中的考量。
到目前為止,其實在用DDD做項目的過程中涉及的基本概念和相應的實現都已經有了。所開放的Demo,麻雀雖小但五臟俱全。
四、結語
本系列的Demo,僅包含了一些核心的部分,我希望可以促使大家多一些思考。特別是一些僅僅是有興趣的或者剛入門的童鞋,可以在這個基礎之上,去實踐。我們不要盲目的追求技術的炫酷,比如那些相對偏向技術層面的CQRS、事件源等的實現。我覺得大家在真正經過實戰之後,自然會有更深的理解,為什麼會出現這些技術方案,和它真正用來解決的問題是什麼,並且自己能夠去實現。
作者:Zachary_Fan
出處:http://www.cnblogs.com/Zachary-Fan/p/DDD_14.html