《領(lǐng)域驅(qū)動設(shè)計:軟件核心復(fù)雜性應(yīng)對之道》Eric Evans 2016年版本

《領(lǐng)域驅(qū)動設(shè)計:軟件核心復(fù)雜性應(yīng)對之道》Eric Evans 2016年版本

封面


序言:

關(guān)注領(lǐng)域枕赵,關(guān)注核心領(lǐng)域位隶,關(guān)注領(lǐng)域驅(qū)動的設(shè)計,關(guān)注模型驅(qū)動的開發(fā)篮昧。

對于業(yè)務(wù)本身就很復(fù)雜的程序開發(fā),你是無法回避這種復(fù)雜性糠睡,你所能做的只有控制這種復(fù)雜性疚颊。

本書描述并建立了領(lǐng)域驅(qū)動建模藝術(shù)的詞匯庫。提供了一個參考框架均抽。

在領(lǐng)域建模過程中不應(yīng)該將概念和實現(xiàn)割裂開來其掂。建模人員不僅要與業(yè)務(wù)人員溝通順暢,還要與開發(fā)人員一塊寫代碼深寥。

領(lǐng)域模型的最大價值在于它提供了一種通用語言贤牛,這種語言是將領(lǐng)域?qū)<液图夹g(shù)人員聯(lián)系在一起的紐帶。

領(lǐng)域模型設(shè)計驅(qū)動開發(fā)闰集,并不是“先建模般卑,后實現(xiàn)”的思維模式蝠检,而是隨著時間迭代演進模型和實踐。

在領(lǐng)域建模過程中不應(yīng)該與實現(xiàn)割裂開來叹谁。

概念與實現(xiàn)密不可分的主要原因在于本慕,領(lǐng)域模型的最大價值是它提供了一種通用語言,這種語言是將領(lǐng)域?qū)<液图夹g(shù)人員聯(lián)系在一起的紐帶监氢。

Eric的經(jīng)驗告訴我們,真正強大的領(lǐng)域模型是隨著時間演進的浪腐,即使是最有經(jīng)驗的建模人員也往往發(fā)現(xiàn)他們是在系統(tǒng)的初始版本完成之后才有了最好的想法议街。

---- Martin Fowler.

前言:

業(yè)務(wù)人員,開發(fā)人員吧雹,以及公共語言的領(lǐng)域模型涂身。這幾個之間并行工作且持續(xù)關(guān)聯(lián)。

成功的項目都有一個共同的特征丁鹉,那就是都有一個豐富的領(lǐng)域模型悴能,這個模型在迭代設(shè)計的過程中不斷演變,而且成為項目不可分割的一部分冯凹。

面對復(fù)雜領(lǐng)域的軟件開發(fā)團隊可以利用這個框架來系統(tǒng)性地應(yīng)用領(lǐng)域驅(qū)動設(shè)計记靡。

成功的項目摸吠,不僅僅要交付有用的軟件嚎花,而且還有后續(xù)的目標(biāo):交付能夠滿足組織后續(xù)需求,可以不斷演進的復(fù)雜軟件啼止。

很多系統(tǒng)的技術(shù)使用方面值得商榷兵罢,但是很多系統(tǒng)失敗在業(yè)務(wù)邏輯上,前面版本過早地變得僵化巩那,成為一個維護代價十分高昂的遺留系統(tǒng)。

在領(lǐng)域模型的基礎(chǔ)上噪生,反復(fù)精華东囚,在代碼上也要體現(xiàn)這些精華页藻。

復(fù)雜性的挑戰(zhàn):

在大多數(shù)軟件項目中,主要的焦點應(yīng)該是領(lǐng)域和領(lǐng)域邏輯份帐。

復(fù)雜的領(lǐng)域設(shè)計應(yīng)該基于模型弥鹦。

領(lǐng)域驅(qū)動設(shè)計是一種思維方式,它旨在加速哪些必須處理復(fù)雜領(lǐng)域的軟件項目的開發(fā)朦促。它有一套完整的設(shè)計實踐栓始,技術(shù)和原則。

領(lǐng)域驅(qū)動設(shè)計與敏捷開發(fā)過程相結(jié)合禀忆,互相增強落恼。

本書遵循兩個開發(fā)實踐:

1. 迭代開發(fā)佳谦。它是敏捷開發(fā)的基礎(chǔ)。

2. 開發(fā)人員和領(lǐng)域?qū)<揖哂忻芮械年P(guān)系钻蔑。領(lǐng)域驅(qū)動設(shè)計的實質(zhì)就是吸收消化大量知識咪笑,最后產(chǎn)生一個反映深層次領(lǐng)域知識并聚焦于關(guān)鍵概念的模型。領(lǐng)域?qū)<揖I(lǐng)域知識映跟,開發(fā)人員構(gòu)建模型和軟件。迭代式開發(fā)弯蚜,貫穿于項目的整個生命周期剃法。

第一部分:“運用領(lǐng)域模型” 提出領(lǐng)域驅(qū)動開發(fā)的基本目標(biāo),這些目標(biāo)是后面幾部分討論的實踐的驅(qū)動因素收厨。

第一章 消化知識

1.1. 有效建模的要素

軟件開發(fā)中的應(yīng)用所需知識的廣度令人望而生畏优构,龐大而復(fù)雜的信息也可能超乎想象钦椭。

領(lǐng)域模型正是解決此類信息超載問題的工具。模型這種知識形式對知識進行了選擇性的簡化和有意的結(jié)構(gòu)化侥锦。適當(dāng)?shù)哪P涂梢允谷死斫庑畔⒌囊饬x德挣,并專注于問題。

建模更像是制作電影 -- 出于某種目的而概括地反映現(xiàn)實番挺。就如同電影制片人講述股市或者闡明觀點時屯掖,他們會選擇素材懂扼,并以一種特殊的方式將他們呈現(xiàn)給觀眾右蒲,建模領(lǐng)域人員也會依據(jù)模型的作用來選擇具體的模型。

模型在領(lǐng)域驅(qū)動設(shè)計中的作用:

1.模型和設(shè)計的核心互相影響陷嘴。

2.模型是團隊所有成員使用的通用語言的中樞间坐。

3.模型是濃縮的知識。

有效建模的要素:

(1). 模型和實現(xiàn)的綁定劳澄。

(2). 建立了一種基于模型的語言秒拔。

(3). 開發(fā)一個蘊含豐富知識的模型。對象具有行為和強制性規(guī)則作谚。模型并不僅僅是一種數(shù)據(jù)模型庵芭,它還是解決復(fù)雜問題不可或缺的部分。模型包含各種類型的知識眨唬。

(4). 提煉模型好乐。

(5). 頭腦風(fēng)暴和試驗曹宴。語言和草圖,再加上頭腦風(fēng)暴活動区转,將我們的討論變成 “模擬實驗室”版扩,在這些討論中可以掩飾,嘗試和判斷上百種變化蜻韭。

1.2. 知識消化

金融分析師要消化理解的內(nèi)容是數(shù)字。

高效的領(lǐng)域建模人員是知識的消化者俯画。

信息的原始資料來自領(lǐng)域?qū)<翌^腦中的知識司草,現(xiàn)有系統(tǒng)的用戶泡仗,以及技術(shù)團隊以前在相關(guān)遺留系統(tǒng)或同領(lǐng)域的其他項目中積累的經(jīng)驗娩怎。

建模不僅僅在于尋找實體和值對象時胰柑,還需要尋找業(yè)務(wù)規(guī)則和業(yè)務(wù)活動。

在一個需要團隊成員持續(xù)學(xué)習(xí)的真實項目中魁巩,要想建立實用且清晰的模型則要求團隊成員既精通領(lǐng)域知識姐浮,也要精通建模技術(shù)卖鲤。

1.3. 持續(xù)學(xué)習(xí)

1.4 知識豐富的設(shè)計

1.5 深層模型

==================================================

第二章 交流與語言的使用

領(lǐng)域模型可成為軟件項目通用語言的核心。模型不僅僅局限于UML(統(tǒng)一建模語言)圖集晚。

通用語言的詞匯包括類和主要操作的名稱区匣。

模型之間的關(guān)系成為所有語言都具有的組合規(guī)則亏钩。詞和短語的意義反映了模型的語義。

開發(fā)人員應(yīng)該使用基于模型的語言來描述系統(tǒng)中的工作蛤签,任務(wù)和功能栅哀。而且領(lǐng)域?qū)<覒?yīng)該使用這種語言來討論需求留拾,開發(fā)計劃和特性。

將模型作為語言的支柱间驮。確保團隊在內(nèi)部所有的交流中以及代碼中堅持使用這種語言,在畫圖扛施,寫東西屹篓,特別是講話時也要使用這種語言。

只有一個模型在起作用妄荔,那么不同模型的共存谍肤,如何防止模型分裂荒揣。

討論系統(tǒng)時要結(jié)合模型。使用模型元素及其交互來大聲描述場景恳蹲,并且按照模型允許的方式將各種概念結(jié)合到一起俩滥。找到更簡單的表達(dá)方式來講出你要講的話霜旧,然后將這些新的想法應(yīng)用到圖和代碼中。

如果連經(jīng)驗豐富的領(lǐng)域?qū)<叶疾荒芾斫饽P秃奖常敲茨P鸵欢ǔ隽耸裁磫栴}棱貌。

在敏捷過程中,需求是隨著項目的前進而演變的婚脱,因為幾乎不存在現(xiàn)在的知識可以允許說明一個應(yīng)用程序障贸。

文檔和圖:

UML圖,主要是以類圖和對象交互圖為主涩维。

UML圖一方面過于細(xì)致,一方面過于遺漏蜗侈。

UML圖無法傳達(dá)模型的兩個最重要的方面睡蟋,一個方面是模型所表示的概念的意義戳杀,另一方面是對象應(yīng)該做哪些事情。

設(shè)計的重要細(xì)節(jié)應(yīng)該在代碼中體現(xiàn)隔缀。良好的實現(xiàn)應(yīng)該是透明的猾瘸,清楚地展示其背后的模型桥嗤。

文檔作為代碼和口頭交流的補充。

將代碼作為設(shè)計文檔的局限性荒吏,它可能會把讀代碼的人淹沒在細(xì)節(jié)中绰更。

文檔不應(yīng)該再重復(fù)表示代碼已經(jīng)表達(dá)出的內(nèi)容锡宋。

當(dāng)編程語言無法直接了當(dāng)?shù)貙崿F(xiàn)概念時执俩,文檔可以澄清設(shè)計意圖。我們應(yīng)該把書面文檔作為代碼和口頭討論的補充尝丐。

為了消除各種差異衡奥,需要使用諸如聲明式設(shè)計這樣的方法矮固,在這類方法中,程序元素用途的陳述決定了它在程序中的實際行為盹兢。

解釋性模型:

解釋性模型

第三章 綁定模型和實現(xiàn)

領(lǐng)域驅(qū)動設(shè)計要求模型不僅能夠指導(dǎo)早期的分析工作,還應(yīng)該成為設(shè)計的基礎(chǔ)蛤迎。

如果整個程序設(shè)計或其核心部分沒有與領(lǐng)域模型相對應(yīng)含友,那么這個模型就沒有價值的窘问,軟件的正確性也值得懷疑。同時把鉴,模型和設(shè)計功能之間過于復(fù)雜的對應(yīng)關(guān)系也是難以理解的庭砍,在實際項目中混埠,當(dāng)設(shè)計改變時也無法維護這種關(guān)系钳宪。若分析和設(shè)計之間差生嚴(yán)重分歧,那么再分析和 設(shè)計活動中所獲得的知識就無法彼此共享搔体。

Model-driven design(模型驅(qū)動設(shè)計)不再將分析模型和設(shè)計開發(fā)分離開,而是尋求一種能夠滿足這兩個方面的單一模型半醉。

為了使Model-Driven Design發(fā)揮作用疚俱,一定要在可控范圍內(nèi)嚴(yán)格保證模型和設(shè)計之間的一致性。

模型>>范式>>設(shè)計

任何參與建模的技術(shù)人員缩多,不管在項目中的主要職責(zé)是什么呆奕,都必須花時間了解代碼。

任何修改代碼的人員則必須學(xué)會用代碼來表達(dá)模型瞧壮。

每一個開發(fā)人員都必須不同程度地參與模型討論并且與領(lǐng)域?qū)<冶3致?lián)系登馒。

參與不同工作的人都必須有意識地通過Ubiquitous language與接觸代碼的人即使交換關(guān)于模型的思想。

第二部分:“模型驅(qū)動設(shè)計的構(gòu)建塊” 將面向?qū)ο箢I(lǐng)域建模中的一些核心的最佳實踐提煉為一組基本的構(gòu)建塊咆槽。使用標(biāo)準(zhǔn)模式可以為公共語言貢獻(xiàn)術(shù)語陈轿,使得所有團隊成員可以使用這些術(shù)語來討論模型和設(shè)計決策。

第四章 分離領(lǐng)域

第五章 軟件中所表示的模型

第六章 領(lǐng)域?qū)ο蟮纳芷?/b>

第七章 使用語言:一個擴展的示例

這一部分是討論一些能夠保持模型和實現(xiàn)之間互相協(xié)調(diào)并提高效率的設(shè)計決策麦射。

第三部分:“通過重構(gòu)來加深理解”討論如何將構(gòu)建塊配置為實用的模型蛾娶,從而實現(xiàn)其價值。

探索本身是永無止境的潜秋,但這并不意味著它是隨機的蛔琅。

第四部分:“戰(zhàn)略設(shè)計” 討論在復(fù)雜系統(tǒng),大型組織以及外部系統(tǒng)和遺留系統(tǒng)的交互中出現(xiàn)的復(fù)雜情況峻呛。

這一部分討論了作為一個整體應(yīng)用于系統(tǒng)的3條原則:上下文罗售,提煉和大型結(jié)構(gòu)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钩述,一起剝皮案震驚了整個濱河市寨躁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌牙勘,老刑警劉巖职恳,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異方面,居然都是意外死亡放钦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門恭金,熙熙樓的掌柜王于貴愁眉苦臉地迎上來操禀,“玉大人,你說我怎么就攤上這事蔚叨〈仓” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵蔑水,是天一觀的道長邢锯。 經(jīng)常有香客問我,道長搀别,這世上最難降的妖魔是什么丹擎? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮歇父,結(jié)果婚禮上蒂培,老公的妹妹穿的比我還像新娘。我一直安慰自己榜苫,他們只是感情好护戳,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著垂睬,像睡著了一般媳荒。 火紅的嫁衣襯著肌膚如雪抗悍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天钳枕,我揣著相機與錄音缴渊,去河邊找鬼。 笑死鱼炒,一個胖子當(dāng)著我的面吹牛衔沼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播昔瞧,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼指蚁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了硬爆?” 一聲冷哼從身側(cè)響起欣舵,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤擎鸠,失蹤者是張志新(化名)和其女友劉穎缀磕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劣光,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡袜蚕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了绢涡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牲剃。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖雄可,靈堂內(nèi)的尸體忽然破棺而出凿傅,到底是詐尸還是另有隱情,我是刑警寧澤数苫,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布聪舒,位于F島的核電站,受9級特大地震影響虐急,放射性物質(zhì)發(fā)生泄漏箱残。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一止吁、第九天 我趴在偏房一處隱蔽的房頂上張望被辑。 院中可真熱鬧,春花似錦敬惦、人聲如沸盼理。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宏怔。三九已至勾哩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間举哟,已是汗流浹背思劳。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留妨猩,地道東北人潜叛。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像壶硅,于是被迫代替她去往敵國和親威兜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容