如何一步一步用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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...