如何一步一步用DDD設計一個電商網站(十四)—— 回顧與總結

来源:http://www.cnblogs.com/Zachary-Fan/archive/2017/02/15/DDD_14.html
-Advertisement-
Play Games

本系列所有文章 如何一步一步用DDD設計一個電商網站(一)—— 先理解核心概念 如何一步一步用DDD設計一個電商網站(二)—— 項目架構 如何一步一步用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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題目大意: 給出一棵樹,每條邊有權值,求經過少於l條邊,權值和少於w的路徑總數。 點分治。每次求出所有點到重心的距離,按w排序,然後維護一個樹狀數組,記錄經過的邊<=i的點個數。由於可能兩個點都在一棵子樹中,再容斥一下就好了。 代碼: 1 #include<iostream> 2 #include< ...
  • 一對多查詢,其實就是使用resultMap的collection對關聯查詢的多條記錄映射到一個list集合屬性中,如果一對一中的resultMap方式使用的比較6的話,可以不看的東西。如果不會搞的小伙伴,可以來這裡看看,還是比較詳細的。 ...
  • 今天我們來講一下解釋器模式。 什麼叫解釋器模式呢?解釋器模式,給定一個語言,定義她的文法的一種表示,並定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。如果一種特定類型的問題發生的頻率足夠高,那麼可能就值得將該問題的各個實例表述為一個簡單語言的句子,這樣就可以構建一個解釋器,該解釋器通過/解釋 ...
  • 一、異同 熟悉Spring的應該也都瞭解它的IOC的功能,那麼對於在OSGI開發環境下,在使用IOC功能時有什麼不同呢?最重要的一點就是Spring上下文對象,每個Spring-Powered Bundle都有自身的Spring上下文對象,而傳統的J2EE開發環境只有一個Spring上下文對象,所以 ...
  • 今天我們來講一下享元模式。 我們在工作之餘可能會接一些私活,比如,幫人開發一個網站,幫人開發一個私人博客。隨著私活的增多,會發現,有很多項目是有相同之處的,比如,幫人開發一個網站,你會發現,之前做的一些網站的代碼單元是可以公共的。所以,即便是有很多的私活,我們不要盲目的去做一些項目,我們要善於發現, ...
  • 環境準備: 部署兩台 tomcat 8.0 安裝 redis 伺服器 下載工具庫( commons-pool2-2.3.jar、jedis-2.7.2.jar 、改良版的 tomcat-redis-session-manager.jar ) 環境搭建: 拷貝 commons-pool2-2.3.ja ...
  • action接收請求參數 在web開發中,去接收請求參數來獲得表單信息非常的常見,自己也總結整理了有關Struts2通過action接收請求參數的幾種方法。 Struts2 提供三種數據封裝的方式: (1) Action 本身作為model對象,通過成員setter封裝 (2) 創建獨立model對 ...
  • 1. this指針的用處: 一個對象的this指針並不是對象本身的一部分,不會影響sizeof(對象)的結果。this作用域是在類內部,當在類的非靜態成員函數中訪問類的非靜態成員的時候,編譯器會自動將對象本身的地址作為一個隱含參數傳遞給函數。也就是說,即使你沒有寫上this指針,編譯器在編譯的時候也 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...