輕松學(xué)DDD之二:如何高效消化知識

輕松學(xué)DDD之二:如何高效消化知識

我是2012年開始接觸DDD的,后續(xù)研讀過幾遍《領(lǐng)域驅(qū)動設(shè)計:軟件核心復(fù)雜性應(yīng)對之道》,也用DDD做過項目??偟母惺苁荄DD的一些概念比較晦澀難懂,很難掌握,因此想寫個系列短文,希望能幫助大家更輕松地理解DDD。文章很多都是我個人體會和理解,難免有錯誤,希望大家能及時指正,共同探討提高。前面短文鏈接:
輕松學(xué)DDD之一:模型驅(qū)動設(shè)計
本文是系列短文第二篇,介紹如何高效消化知識。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名申請、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、潁州網(wǎng)站維護、網(wǎng)站推廣。

1. 知識來源

在講如何消化知識前,我們要明確下建模的知識來源有哪些。首先我們通過下圖來考察模型、領(lǐng)域、軟件、現(xiàn)實世界、計算機系統(tǒng)等幾個概念的關(guān)聯(lián)。
輕松學(xué)DDD之二:如何高效消化知識

  1. 現(xiàn)實世界(藍線左半邊)和計算機系統(tǒng)(藍線右半邊)。我們把用戶需求理解為用戶要求我們構(gòu)建一個特定的計算機系統(tǒng),通過它用戶能按自己的期望來改變現(xiàn)實世界。比如淘寶網(wǎng)就是一個這樣的計算機系統(tǒng),通過它阿里巴巴可以讓商品銷售變得更快捷、更方便、成本更低。
  2. 領(lǐng)域和軟件。領(lǐng)域就是用戶需求和從用戶需求這個視角出發(fā)對現(xiàn)實世界的認知集合;軟件就是可以讓計算機系統(tǒng)按照用戶期望方式來運轉(zhuǎn)的程序。
  3. 領(lǐng)域模型。它富含領(lǐng)域知識,與實現(xiàn)綁定,能夠把領(lǐng)域和軟件有效地耦合起來,從而能夠讓我們基于模型快速開發(fā)功能豐富的軟件產(chǎn)品。

從上面的認知我們可以知道模型就是在用戶目標(biāo)和軟件實現(xiàn)技術(shù)的約束下對領(lǐng)域知識的精確化、結(jié)構(gòu)化和抽象。

2. 知識消化

由于建模依賴于在用戶目標(biāo)和軟件實現(xiàn)技術(shù)約束下的領(lǐng)域知識梳理,因此建模就要求領(lǐng)域?qū)<摇⒔<液蛙浖_發(fā)之間通過高效地溝通協(xié)作來有效地消化領(lǐng)域知識。下面我們從溝通媒介、溝通形式和目標(biāo)三個方面來展開說明如何做到這一點。

2.1 溝通媒介

消化知識的溝通媒介可以是多種多樣,下面是幾種主要的溝通媒介:

  1. 口語:這是人類最擅長的溝通方式,成本低廉,形式豐富,是eric最為推崇的溝通手段。
  2. 文字:擅長精確表達,同時與口語的轉(zhuǎn)換也非常方便。我們用文字來記錄模型中最重要的概念、行為、規(guī)則的定義和解釋。
  3. UML:圖形形式的UML非常擅長表達對象間的關(guān)系和交互,也能有效地指導(dǎo)OO語言的代碼編寫。但是它不擅長概念的定義,也難以表達對象的行為和約束,需要與文字說明配合。UML圖包含了大量的實現(xiàn)細節(jié),大家很難基于它們做高效溝通,同時創(chuàng)建維護它們需要大量的工作量,因此我們往往用簡單的非正式的UML圖作為討論的主題。
  4. 代碼:通過代碼表達業(yè)務(wù)細節(jié)可以讓我們節(jié)省大量的文檔編寫維護的工作量;同時如果代碼能夠讓領(lǐng)域?qū)<胰菀桌斫饽酥辆帉懀部梢宰屇P湍芨玫嘏c實現(xiàn)綁定。但是代碼往往充斥實現(xiàn)細節(jié),難以表達整體的、大比例的模型知識。
  5. 解釋性模型:用戶驅(qū)動軟件開發(fā)過程的技術(shù)模型必須經(jīng)過嚴(yán)格的精簡,受到嚴(yán)格的限制,因此基于技術(shù)模型學(xué)習(xí)領(lǐng)域知識效率很低。解釋性模型則沒有這些限制,用它可以更快更好地理解領(lǐng)域知識。
    總體來講,我們應(yīng)該以口語為主要溝通手段,用文字定義重要的領(lǐng)域?qū)ο?、約束和行為,用簡化的非正式UML圖表達領(lǐng)域?qū)ο箝g的關(guān)聯(lián)和交互,用代碼來承載設(shè)計細節(jié),用解釋性模型來加快領(lǐng)域知識的學(xué)習(xí)。

2.2.知識消化的溝通形式

有了溝通手段,我們還需要溝通形式,下面是一些主要的溝通形式:

  1. 頭腦風(fēng)暴。當(dāng)一群人圍繞一個特定的興趣領(lǐng)域產(chǎn)生新觀點的時候,這種情境就叫做頭腦風(fēng)暴。頭腦風(fēng)暴通過參與者之間充分的思想碰撞來激發(fā)新觀點和解決方法,因此非常適合在建模初期使用。頭腦風(fēng)暴具體展開形式我們可以采用以簡化的UML圖為主題,一邊討論一邊精煉的方式;也可以采用現(xiàn)在比較流行的事件風(fēng)暴方式。
  2. 場景走查。我們可以基于模型來走查各種場景,以便確認模型能夠很好地表達和實現(xiàn)各種場景。場景走查是一個成本低廉的試錯手段,通過它我們可以避免由于不合理的模型造成軟件開發(fā)的返工。
  3. 原型反饋。當(dāng)建模有初步成果時,開發(fā)可以基于現(xiàn)有模型快速實現(xiàn)一個沒有界面和持久化數(shù)據(jù)庫的原型,以驗證模型的有效性,同時基于原型可以更加直觀地與領(lǐng)域?qū)<易鲞M一步溝通。
  4. 建模專家與開發(fā)結(jié)對編碼。建模專家可以通過與開發(fā)的結(jié)對編碼,可以更加全面地收集模型映射為代碼的過程中的各種碰到的問題,這樣能更好地識別和修正模型中存在的缺陷。
  5. 小范圍討論。當(dāng)模型初步穩(wěn)定后,模型仍會根據(jù)需求變化以及理解的加深不斷演進,此時團隊中已經(jīng)有若干能深刻理解模型的骨干,因此對于模型的局部修改,與他們一起做小范圍討論會更加高效。變化的結(jié)果可以通過各種方式通知給團隊的全體成員。

2.3. 目標(biāo)

知識消化的最終目標(biāo)無疑是構(gòu)建良好的模型,但是構(gòu)建良好的模型需要通過統(tǒng)一語言精煉模型來支撐。

2.3.1. 統(tǒng)一語言

統(tǒng)一語言是指團隊所有成員用統(tǒng)一的術(shù)語來指代領(lǐng)域概念和知識,它有如下幾方面:

  1. 統(tǒng)一的術(shù)語。這個可以說是統(tǒng)一語言的起點。
  2. 術(shù)語是精確的。確保術(shù)語是精確地指代一個領(lǐng)域概念和知識。當(dāng)術(shù)語的含義模糊、含義過于寬泛、在不同上下文下有不同含義等情況時,往往會造成大家理解上的偏差,最終統(tǒng)一只淪落為形式上的。
  3. 術(shù)語理解不需要翻譯。團隊有些成員或者角色(比如開發(fā))在理解術(shù)語時,會在頭腦中把它翻譯為另一個更容易理解的術(shù)語再來理解。如果有這種情況,請把頭腦中的術(shù)語也表達出來,大家要重新看看哪個術(shù)語能更好地表達領(lǐng)域知識。
  4. 統(tǒng)一口語、文檔和UML等各種形式的語言。同樣一個概念不管在口語、文檔描述還是UML圖中都應(yīng)該統(tǒng)一起來,否則也容易造成理解偏差。如果有些術(shù)語不能郎朗上口,那么就修改為一個可以郎朗上口的術(shù)語。
2.3.2 模型精煉

我們知道簡單合理的軟件設(shè)計是軟件在長期的開發(fā)過程中能夠保持低成本修改的關(guān)鍵。在DDD中,領(lǐng)域模型的復(fù)雜度決定了軟件設(shè)計的復(fù)雜度,因此模型精煉就是我們消化領(lǐng)域知識的最重要的目標(biāo)。也就是說我們消化領(lǐng)域知識的目標(biāo)不是為了理解全部的領(lǐng)域知識;而是為了明確對于實現(xiàn)用戶需求而言,哪些領(lǐng)域知識是重要的,哪些是不重要的。模型精煉是一個持續(xù)的過程。隨著我們對于領(lǐng)域理解的不斷深入,模型會持續(xù)精煉。隨著需求的不斷變化,模型關(guān)注的最重要的概念也會不斷添加和刪除。

3. 知識傳承

消化知識是如此之難,因此保證這些知識的平穩(wěn)傳承就很重要。盡管這些知識會沉淀在我們的文檔、UML和代碼等各種物質(zhì)載體之中,但是它們最重要的載體還是團隊中深刻理解了這些知識的核心骨干,因此在軟件開發(fā)過程中保證這些核心骨干的相對穩(wěn)定才能保證知識的有效傳承,才能最終保證DDD的成功。

本文標(biāo)題:輕松學(xué)DDD之二:如何高效消化知識
本文鏈接:http://muchs.cn/article48/jpghep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站網(wǎng)站改版、響應(yīng)式網(wǎng)站、自適應(yīng)網(wǎng)站、面包屑導(dǎo)航、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司