輕鬆學DDD之二 如何高效消化知識

2021-09-17 08:41:38 字數 2158 閱讀 7598

知識**

在講如何消化知識前,我們要明確下建模的知識**有哪些。首先我們通過下圖來考察模型、領域、軟體、現實世界、計算機系統等幾個概念的關聯。

輕鬆學ddd之二:如何高效消化知識

現實世界(藍線左半邊)和計算機系統(藍線右半邊)。我們把使用者需求理解為使用者要求我們構建乙個特定的計算機系統,通過它使用者能按自己的期望來改變現實世界。比如**網就是乙個這樣的計算機系統,通過它阿里巴巴可以讓商品銷售變得更快捷、更方便、成本更低。

領域和軟體。領域就是使用者需求和從使用者需求這個視角出發對現實世界的認知集合;軟體就是可以讓計算機系統按照使用者期望方式來運轉的程式。

領域模型。它富含領域知識,與實現繫結,能夠把領域和軟體有效地耦合起來,從而能夠讓我們基於模型快速開發功能豐富的軟體產品。

從上面的認知我們可以知道模型就是在使用者目標和軟體實現技術的約束下對領域知識的精確化、結構化和抽象。

知識消化

由於建模依賴於在使用者目標和軟體實現技術約束下的領域知識梳理,因此建模就要求領域專家、建模專家和軟體開發之間通過高效地溝通協作來有效地消化領域知識。下面我們從溝通媒介、溝通形式和目標三個方面來展開說明如何做到這一點。

2.1 溝通媒介

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

口語:這是人類最擅長的溝通方式,成本低廉,形式豐富,是eric最為推崇的溝通手段。

文字:擅長精確表達,同時與口語的轉換也非常方便。我們用文本來記錄模型中最重要的概念、行為、規則的定義和解釋。

uml:圖形形式的uml非常擅長表達物件間的關係和互動,也能有效地指導oo語言的**編寫。但是它不擅長概念的定義,也難以表達物件的行為和約束,需要與文字說明配合。uml圖包含了大量的實現細節,大家很難基於它們做高效溝通,同時建立維護它們需要大量的工作量,因此我們往往用簡單的非正式的uml圖作為討論的主題。

**:通過**表達業務細節可以讓我們節省大量的文件編寫維護的工作量;同時如果**能夠讓領域專家容易理解乃至編寫,也可以讓模型能更好地與實現繫結。但是**往往充斥實現細節,難以表達整體的、大比例的模型知識。

解釋性模型:使用者驅動軟體開發過程的技術模型必須經過嚴格的精簡,受到嚴格的限制,因此基於技術模型學習領域知識效率很低。解釋性模型則沒有這些限制,用它可以更快更好地理解領域知識。

總體來講,我們應該以口語為主要溝通手段,用文字定義重要的領域物件、約束和行為,用簡化的非正式uml圖表達領域物件間的關聯和互動,用**來承載設計細節,用解釋性模型來加快領域知識的學習。

2.2.知識消化的溝通形式

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

頭腦風暴。當一群人圍繞乙個特定的興趣領域產生新觀點的時候,這種情境就叫做頭腦風暴。頭腦風暴通過參與者之間充分的思想碰撞來激發新觀點和解決方法,因此非常適合在建模初期使用。頭腦風暴具體展開形式我們可以採用以簡化的uml圖為主題,一邊討論一邊精煉的方式;也可以採用現在比較流行的事件風暴方式。

場景走查。我們可以基於模型來走查各種場景,以便確認模型能夠很好地表達和實現各種場景。場景走查是乙個成本低廉的試錯手段,通過它我們可以避免由於不合理的模型造成軟體開發的返工。

原型反饋。當建模有初步成果時,開發可以基於現有模型快速實現乙個沒有介面和持久化資料庫的原型,以驗證模型的有效性,同時基於原型可以更加直觀地與領域專家做進一步溝通。

建模專家與開發結對編碼。建模專家可以通過與開發的結對編碼,可以更加全面地收集模型對映為**的過程中的各種碰到的問題,這樣能更好地識別和修正模型中存在的缺陷。

小範圍討論。當模型初步穩定後,模型仍會根據需求變化以及理解的加深不斷演進,此時團隊中已經有若干能深刻理解模型的骨幹,因此對於模型的區域性修改,與他們一起做小範圍討論會更加高效。變化的結果可以通過各種方式通知給團隊的全體成員。

2.3. 目標

知識消化的最終目標無疑是構建良好的模型,但是構建良好的模型需要通過統一語言和精煉模型來支撐。

2.3.1. 統一語言

統一語言是指團隊所有成員用統一的術語來指代領域概念和知識,它有如下幾方面:

知識傳承

消化知識是如此之難,因此保證這些知識的平穩傳承就很重要。儘管這些知識會沉澱在我們的文件、uml和**等各種物質載體之中,但是它們最重要的載體還是團隊中深刻理解了這些知識的核心骨幹,因此在軟體開發過程中保證這些核心骨幹的相對穩定才能保證知識的有效傳承,才能最終保證ddd的成功。

如何入門vue之二

學習完指令之後我們需要學習的就是元件。在學習元件前我們要了解一下 methods 用來處理事件的。computed用來計算屬性 他就是類似於data一樣只不過是動態的處理資料 裡面寫的方法當成屬性直接使用 注意的是它不能傳引數。data用來存放需要展示的資料。元件內的data 需要使用return ...

XML輕鬆學習手冊(5)XML語法之二

二.元素的語法 元素由一對標識以及其中的內容組成。就象這樣 ajie。元素的名稱和標識的名稱是一樣的。標識可以用屬性來進一步描述。在xml中,沒有任何保留字,所以你可以隨心所欲的用任何詞語來作為元素名稱。但是也必須遵守下列規範 1.名稱中可以包含字母 數字以及其它字母 2.名稱不能以數字或 下劃線 ...

sqlalchemy基礎 例項學之二 查詢資料庫

from sqlch a import from sqlalchemy.orm import sessionmaker 建立與資料庫的會話 session sessionmaker bind engine 也可以用以下兩條語句來實現 session sessionmaker session.conf...