背景
近年來,蘇寧集團業務不斷擴大,用戶快速增長,線上線下融合不斷深入,系統的複雜性越來越高,技術的廣度和深度都在不斷拓展。
在整個集團技術不斷迭代演進的過程中,集團內各個系統也同步更新、迭代、重構,快速適應技術的發展,滿足業務增長的需求。
蘇寧金融會員系統作為蘇寧金融的一級系統,從易付寶誕生開始就作為基礎支撐系統為整個金融業務系統提供會員服務。經過多年的演化和業務版本的迭代維護,到如今代碼調用錯綜複雜,各個邏輯散落在代碼的各個角落,牽一髮而動全身。而且這些業務邏輯基本都集中落在了代碼的Biz層中,導致Biz層臃腫龐大。
為了適應蘇寧業務的快速發展,跟進蘇寧集團多活架構的演進,金融會員系統的技術架構需要再一次躍遷。
架構選型
重構系統的架構選型是一個仁者見仁智者見智的事情,沒有哪一種模式是標準答案,只能追求更適合的選項。本次對金融會員系統重構,從框架選型到架構選型都做了新的選擇,選擇了Spring+Mybatis+Mycat+MySQL的技術框架和DDD+CQRS+插件的架構模式。
領域驅動設計(DDD,Domain-Driven Design)作為這一次系統重構的架構選型,主要考慮到以下因素:
- DDD模式更加關注業務領域,能夠使得蘇寧金融會員系統更加聚焦會員產品的核心業務。
- DDD模式採用面向對象的設計,將系統模塊化,有利於實現軟體模塊的高內聚和低耦合,使得會員系統更加適合應對蘇寧業務的快速迭代。
技術實現
領域驅動設計實踐
DDD模式的最大優勢在於聚焦產品核心業務,最難搞定的也在此處。那麼該如何實現呢?領域驅動設計的關鍵在領域模型,如果把領域模型拆開來看,如下圖,就不難理解了。