領域驅動設計能做什么

一、前言

本篇文章會簡要介紹領域驅動設計能做什么,以作為多篇介紹領域驅動設計文章的開篇。后面會使用領域驅動設計的英文縮寫 DDD。之所以開篇介紹 DDD 能做什么,而不是介紹是什么,原因是后者答案很容易找,只需 Google 一下。而介紹 DDD 能做什么,則可以從實踐的角度介紹學習和使用 DDD 的必要性。

整體而言,DDD 還是一門偏小眾的技術,了解者比例不高,更多的人也還沒有意識到它的重要性。這也是寫此篇文章的一個重要原因。

當然,雖然全篇不會介紹什么是 DDD,但是一句話介紹還是少不了:領域驅動設計是一種思想,用來指導復雜的軟件系統的設計。正如那本同名書的副標題 ——《軟件核心復雜性應對之道》。所以,領域驅動設計的思想是值得每一位從事軟件系統開發,尤其是業務系統開發的同學了解學習的。

接下來簡單介紹一下 DDD 在軟件開發各方面中所能起到的作用。

二、DDD 的作用

1. 需求討論

軟件開發的很多問題其實源于需求討論階段。需求討論不清、對需求的誤解,等等,都會從一開始就對軟件開發造成負面影響。

那 DDD 如何可以解決這一個問題?DDD 解決這一問題的方法的核心是 Ubiquitous Language —— 通用語言。

DDD 指出,對業務知識抽象建模而形成的領域模型應當成為軟件開發交流過程中使用的通用語言。對于同一個業務概念,需求文檔和代碼實現中應該使用同一個詞語去表述。不僅表面上的命名需要一致,背后的含義也應當是一致的。

這么做原因在于,軟件開發過程中,同一個詞,在產品經理和工程師的腦中,可能有著不一致的含義和理解。雖說這種不一致一般不至于差出十萬八千里,但在復雜的系統開發中,即便是細小的差異,經過需求的組合以及時間的積累,最終會導致比較大的差異。而這種差異會對后來的軟件開發造成越來越大的麻煩。

而在軟件開發中應用 DDD,則可以避免這種問題的發生。

2. 系統設計

現在的業務系統的開發,使用的技術有了很大的進步,但是很多系統的設計似乎同十幾年前并沒有太大差別。雖然大家所使用的語言,如 Java、Python、Javascript、Go 等,都或多或少的包含了面向對象的特性,但大部分程序還是以面向過程的思維被設計。而這會導致很多系統設計層面的問題,例如過于復雜、龐大的業務層。

我對系統設計的看法是:對于一個系統的整體設計,更多的應當是使用面向對象的思想,面向過程的思想更多的是應用在具體功能設計上。

在面向對象設計的實際應用方面,DDD 能夠提供非常好的實踐性指導。這就是 DDD 在系統設計方面的意義。

3. 接口設計

在我工作過的項目中,接口設計常常是一個難題。接口不同于代碼實現,代碼實現可以經常修改,但接口一旦發布就很難修改了。所以,接口的設計需要非常慎重的考慮。

如何設計接口呢?在這方面,REST 是一個很好的實踐。當然我不是說 REST 能解決所有的接口設計問題,確實有很多接口不適合用 REST 設計,也有很多接口使用類似但非標準的 REST 接口形式設計。但我建議,在設計接口時請認真考慮 REST 風格。

在使用 REST 風格設計接口時,需要考慮的重要問題包括確定系統中有哪些 Resource、這些 Resource 之間的關系是什么?

其實 REST 接口中的 Resource 其實可以與領域驅動設計中的實體互相等同。如果一個系統設計使用了領域驅動設計,那確定 Resource,以及它們之間的關系也就不是難事。自然,設計出合理的接口也就變得更加容易。

五、小結

大家在討論技術問題時,往往會關注新和大的話題,比如某種新技術、新框架,或者某某系統的高可用架構設計、雙11、大促系統設計等等。

這樣的題目顯然更吸引眼球。雖然這些高大上的內容是大家在工作中需要考慮的內容,也很重要,但是不應因此忽視平時工作更常遇見的問題 —— 如何設計好復雜的業務系統。

如果不能解決好業務系統的復雜性問題,那些如高可用、高并發、多機房容災等等的高大上的技術改進工作實施起來也會變得異常困難。最重要的是,如果整個團隊被業務問題搞得焦頭爛額時,還有多少精力和熱情投入到技術改進工作呢?

所以,從上面這個角度講,領域驅動設計解決的不僅是業務系統的復雜性問題。

對于前面講到的內容,我會在后續的文章中做更詳細的介紹。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,273評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,870評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,527評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,010評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,250評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,769評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,656評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,853評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,103評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,487評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,815評論 2 372

推薦閱讀更多精彩內容

  • 10月有幸參加ThoughtWorks組織的《領域驅動的微服務架構設計實戰工作坊》培訓課程,盡管課程時間只有短短一...
    李戩plutocracy閱讀 7,078評論 4 36
  • 有位朋友最近在為企業做領域驅動設計(Domain Driven Design)內訓時,遇到一位資深學員向他抱怨該技...
    MagicBowen閱讀 18,691評論 8 66
  • 開心有時也很容易啊,比如剛到車站車就來了,隨機播放正好是最近喜歡的歌,還有今晚的風真舒服。晚安,好夢。
    大益閱讀 242評論 0 0
  • (二)似曾相識未謀面,一見傾心網結緣 中國水仙花屬石蔥科、水仙屬多年生草本植物,鱗莖生得頗象洋蔥、大蒜、故六朝時稱...
    昊水長天閱讀 622評論 0 5
  • 摳圖法 打開照片—復制圖層—快速選擇工具選擇背景—編輯菜單—填充—前景色
    南下雙魚閱讀 317評論 0 2