1. 程式人生 > >DDD應對運營活動系統腐化實踐

DDD應對運營活動系統腐化實踐

前言

任何人類的設計都會腐化,軟體系統也不例外

腐化之謎

隨著系統的規模增長和複雜度膨脹,系統會慢慢腐化。

於是改一個很簡單的下單地址,就會牽動整個交易系統十幾處的改動。

如何解決這種腐化之謎呢?

參考計算機系統架構:

一個複雜的計算機系統架構包括:軟體系統元素,元素之間的聯絡,元素本身有自己特有屬性。

於是我們可以在架構角度參考計算機系統架構的實現。

架構建模

為達到上面提到的架構建模的目的,引入領域驅動。

領域驅動圍繞業務概念構建領域模型,通過分離技術的方式實現應對複雜業務,及系統難以演進問題的解決方案。

DDD帶來的不同:

  1. 將原有以技術角度審視架構演進的視角,轉換到以業務視角切入架構。
  2. 業務複雜度來源於領域本身,深入領域,正確識別出領域深層次概念及關係。
  3. 將領域知識進行結構性表達,同時與程式設計模型保持一致,便形成了DDD。

基於問題空間的DDD模式

基於解空間的DDD模式

界限上下文

由顯示邊界限定的特定內聚職責,領域模型便存在於上下文之內。

界限上下文識別過程:

領域分析

如何通過真實業務驅動需求演化出DDD模型呢?

可以採用事件風暴進行領域分析。

流程:

  1. PM,運營,RD共聚一堂
  2. 數小時內理解複雜領域
  3. 標記簡單的UML
  4. 工作流程與DDD完美匹配
  5. 事件流演化

以電商系統為例

事件風暴
事件:PM關心真實事件
如:使用者訂單已釋出,商品已釋出
說明:關注點在於什麼領域模型發生了什麼變化。

命令風暴
命令:通過什麼活動產生了事件
如:使用者提交了訂單,開放平臺同步商品
說明:命令幫助我們明確系統對外提供的能力,同時明確業務上的輸入
命令來源:使用者UI介面的操作,外部系統呼叫觸發,定時任務觸發

尋找聚合
聚合:一組相關性領域模型的聚合,用來封裝業務不變性,確保關聯緊密的領域模型內聚在一起
如:訂單和商品
聚合的目的在於業務內聚,強迫RD進行簡化領域模型的關聯,實現業務設計高內聚低耦合的目的

劃分界限上下文

  1. 業務模型的問題是否同一個,是則放在同一個界限上下文中
  2. 如果一個聚合同時解決了多個問題,則需要定義不同的上下文確定解決特定問題

界限上下文之內可以自由選擇架構模式,如MVC,CQRS,微服務,SOA等。

不是所有界限上下文都採用領域驅動方式,非核心子域可參考資料驅動下的面向過程程式設計。

提取出面向切面的聚合層,以工程技術因素為主要考慮點。

DDD的核心價值在於指導劃分界限上下文。

DDD分層設計

領域模型建設思路:

  1. 業務與技術關注點分離,依賴倒置,內部不依賴於外部且外部可替換
  2. 介面介面卡架構
  3. 防腐層建設,領域模型依賴穩定性

參考六邊形架構:

架構目標:

  • 獨立於框架
  • 與資料庫分離
  • 可測試性
  • 與外部結構分離
  • 與UI分離

架構原則:

  • 關注點分離,切割不同層
  • 依賴原則:外部依賴內部,依賴倒置
  • 架構設計圍繞用例

結合CQRS設計

CQRS:命令查詢職責分離

將更復雜的領域模型拆分為讀取和寫入兩部分。
將訊息傳遞,資料日誌同步,領域事件和事件溯源使用到特定上下文。

領域驅動實踐

目前我們活動營銷系統中,存在大量迭代需求都是針對運營需求所設計,需求本身具有複雜性和持續迭代性,故均已轉換採用領域驅動設計方式實現。

對現有及可預期的玩法需求進行了邏輯抽象,提供了統一業務領域玩法模型,為運營提供統一玩法配置管理平臺,進行玩法需求配置,經過領域系統核心進行整合,對使用者輸出統一玩法活動UI及流程。

在區域性演進及擴充套件需求,採用元資料+大欄位應對資訊的不確定性,流程引擎+規則引擎構造玩法,DSL提供動態建立玩法資源配置的能力。

梳理事件風暴,抽象命令風暴,尋找履行命令的業務名詞,對類似的名詞玩法進行共性提取,做合適的抽象,同時建立通用語言描述及定義。

採用DDD分層架構+六邊形架構+CQRS模型,使得系統具備面向領域驅動的演進能力。

最後

DDD不是銀彈

哪些產品適用於DDD:

  1. 是否是複雜問題,或者子域內具有複雜性
  2. 業務是否重要且有很高的預期
  3. 是否可以讓運營和PM介入
  4. 遵循迭代式的開放方法

領域模型好壞的標準:

  1. 模型反映了對於問題的抽象,抽象沒有統一的標準
  2. 模型是迭代演進的,需要持續整合,改進
  3. 通用語言,領域模型和程式碼目標意圖一致

更多交流:

相關推薦

DDD應對運營活動系統腐化實踐

前言 任何人類的設計都會腐化,軟體系統也不例外 腐化之謎 隨著系統的規模增長和複雜度膨脹,系統會慢慢腐化。 於是改一個很簡單的下單地址,就會牽動整個交易系統十幾處的改動。 如何解決這種腐化之謎呢? 參考計算機系統架構: 一個複雜的計算機系統架構包括:軟體系統元素,元素之間的聯絡,元素本身有自己特有屬

京東活動系統億級流量應對之術

作者:幹天星,2012年初加入京東,先後在京東審計、搭配購、jshop活動系統等專案從事系統研發和架構工作。目前主要負責jshop活動系統架構升級,以及jshop資料中心實現運算架構設計。對構建高併發web架構,以及高效能實時大資料運算,有一定的見解。入職前有過5年電信傳統行業開發、架構經驗。 背景

領域驅動設計(DDD)在美團點評業務系統實踐

點選上方藍字訂閱,不錯過下一篇好文章本文轉自美團點評技術公眾號:meituantech前言至少3

攜程日處理20億數據,實時用戶行為服務系統架構實踐

現在 應用 模塊 讀取數據 謝謝 經驗 需要 水平 pic 攜程實時用戶行為服務作為基礎服務,目前普遍應用在多個場景中,比如猜你喜歡(攜程的推薦系統)、動態廣告、用戶畫像、瀏覽歷史等等。 以猜你喜歡為例,猜你喜歡為應用內用戶提供潛在選項,提高成交效率。旅行是一項綜合性的

pdo設備運營平臺系統

測試 pdo 系統外部描述(目的 技術原理)2.1 適用的網絡拓撲/應用場景(場景範圍) pdo設備在客戶端 運營平臺在雲端2.2 產品系統適用的網絡管理方式系統服務的設備對象需要可以連接到綠盟雲端,需要雲端可以訪問設備的web界面,並且設備和雲端通過A接口連接2.3 系統硬件關聯性依賴於

運營活動需求實現

這樣的 獎勵 事情 可能 平時 即使 活動 div 清除 平時遊戲運營活動需求,看起來是蠻復雜的。事實上本質上任務系統或者成就系統類似。 一般需求像這樣: 1. 活動有開始時間和結束時間要求。 2. 活動給出的獎勵也有開始時間和結束時間要求。

十年磨一劍,美國巨頭視頻網站 Hulu 的直播系統架構實踐

美國 視頻網站 直播系統架構 Hulu 是 2007 年在美國上市的在線視頻公司,提供會員制付費視頻服務,商業模式與國內的愛奇藝、優酷類似。Hulu 今年 5 月發布了最新的 OTT 電視直播應用——Hulu Live TV,目標是替代傳統的有線電視服務,和國內最近興起的直播應用,比如 YY,映

電信寬帶運營支撐系統

接收 arch 客戶 ble 流程 鏈接 ora 任務 封裝對象 電信寬帶運營支撐系統(電信采集)   流程:用戶---NAS---AAA---log文件   任務:log文件內容---解析---封裝對象---服務器---入庫(---網上營業廳)   技術:java(io、

JA17-大型電商分布式系統應用實踐+性能優化+分布式應用架構+負載均衡+高並發設計+持久化存儲視頻教程

war height imageview clas 圖片 進步 pac 點滴 blank JA17-大型電商分布式系統應用實踐+性能優化+分布式應用架構+負載均衡+高並發設計+持久化存儲視頻教程 新年伊始,學習要趁早,點滴記錄,學習就是進步! 不要到處找了,抓緊提升自

EOSS V3.0.2 企業運營支撐系統(基於RBAC原理的權限管理)

mil rac myeclips 子菜單 ring http firefox bat ont 下載地址:https://github.com/jelly-liu/

基於多級緩存的充電系統優化實踐

n) 解決 清理 moni 組織 超時時間 microsoft ole rim 基於多級緩存的充電系統優化實踐 原文是發表在文章中,剛看了下文章主要用於轉載,因此在隨筆中重新發布一下。 摘要 正如前文中《海量並發下充電業務優化實踐》所述,在充電過程中由於涉及到大量的實時數據

Zabbix企業級分布式監控系統最佳實踐

ffffff HR 詳細 裝包 實踐 學習 詳細介紹 分表 zabb Zabbix企業級分布式監控系統最佳實踐 【下載地址:https://pan.baidu.com/s/1VXBV7C3ULcwbdRtCbQ0xoQ 】 《Zabbix企業級分布式監控系統》從運維(OPS

學習SVN03 SVN版本控制系統最佳實踐

SVN版本控制系統最佳實踐   第1章SVN介紹及應用場景 1.1什麼是SVN(Subversion) Svn(subversion)是近年來崛起非常優秀的版本管理工具,與CVS管理工具一樣,SVN是一個跨平臺的開源的版本控制系統。Svn版本

(Android第一行程式碼實驗一)活動的最佳實踐

活動的最佳實踐    1.知曉當前是在哪一個活動         這個技巧將教會你,如何根據程式當前的介面就能判斷出這是哪一個活動。  首先需要新建一個 BaseActivity 繼承自

Open-Falcon基礎監控系統建設實踐(一)

監控,是運維的眼睛,是穩定性建設中最重要的一環。 一般來講,基礎監控系統的主要功能就是發現問題。 故障發生前,通過監控的看圖巡檢,發現隱患;故障發生時,通過實時的告警,快速發現問題,定位問題所在;故障發生後,使用過去的歷史資料圖表,進行事後覆盤,避免下次發生。 本篇文章,我們不討

機器學習在美團配送系統實踐:用技術還原真實世界

在2018 AI開發者大會(AI NEXTCon)上,美團配送AI方向負責人何仁清,分享了美團在即時配送領域中機器學習技術的最新進展,以及如何通過大資料和機器學習手段,建立對線下真實世界各種場景的感知能力,還原並預測配送過程各個細節,從而提升整體配送系統的精度。 美團“超腦”配送系統的由來 2014年,斯

貸前系統ElasticSearch實踐總結

貸前系統負責從進件到放款前所有業務流程的實現,其中涉及一些資料量較大、條件多樣且複雜的綜合查詢,引入ElasticSearch主要是為了提高查詢效率;並希望基於ElasticSearch快速實現一個簡易的資料倉庫,提供一些OLAP相關功能。有一些心得總結,向大家介紹一下。

莫言系統腐化——“一坨”真的好嗎?

最近重構系統,腦子裡不停的思考一些問題,為什麼很多系統是“一坨”?真的就停留在一坨了嗎?真的就甘心接受所謂的一坨嗎? 今天偶然發現Frank的文章,跟作者溝通後,以下作為轉載,文末點選檢視原文。感謝在這個浮躁的氛圍中,還有人具備如此珍貴的思考與實踐!感謝!

創業公司做資料分析(二)運營資料系統

  作為系列文章的第二篇,本文將首先來探討應用層中的運營資料系統,因為運營資料幾乎是所有網際網路創業公司開始做資料的起點,也是早期資料服務的主要物件。本文將著重回顧下我們做了哪些工作、遇到過哪些問題、如何解決並實現了相應的功能。 早期資料服務   產品上

深入淺出排序學習:寫給程式設計師的算法系統開發實踐

引言 我們正處在一個知識爆炸的時代,伴隨著資訊量的劇增和人工智慧的蓬勃發展,網際網路公司越發具有強烈的個性化、智慧化資訊展示的需求。而資訊展示個性化的典型應用主要包括搜尋列表、推薦列表、廣告展示等等。 很多人不知道的是,看似簡單的個性化資訊展示背後,涉及大量的資料、演算法以及工程架構技術,這些足以讓大部分