領域驅動設計之入門級教程(上)

2021-08-30 18:59:28 字數 1859 閱讀 3141

文中提到軟體設計有很多方法,其中一種較為出名的「瀑布設計」。過程就是業務專家提出需求,軟體分析人員根據需求建立模型,然後開發人員根據模型進行編碼,至上而下的瀑布模式。這個模式應該用了很多年,也應該有很多成功的案例。但是他應用的範圍和年代都離我們遠去,我想它應該是比較符合需求變化不大,或者是需求較為明朗。它的缺點也很明顯,就是資訊的流向是單向的,從業務專家-》軟體分析人員-》開發人員,不存在資訊的反饋(也可能是剛開始的時候,不需要反饋資訊)。沒有資訊反饋的話,後面的乙個環節就會根據自己的理解和認識加入自己的東西,就會離業務專家想要的東西越來越遠,出來結果之後,就可能是返工開始的日子了。

另乙個文中提到的就是:xp(extremeprogramming 極限程式設計)。書中應該是不太推崇xp,估計是和自己是講ddd(domain driven development領域驅動開發)有關係吧。敏捷出現的背景應該需求出現了問題,也就是需求的變化,而且是變更頻繁,模型就會變更頻繁,相應的文件也會變更頻繁,開發的**也就變更頻繁。這時候,需要一種新的設計方法來支撐這種局面,改變一下大家的工作方式,於是乎「敏捷」誕生了。它推崇少些文件,不要過度設計,甚至是不要設計,以先滿足目前的需求為準,進行**開發,盡早的讓客戶看到可以執行的最終版本。等到需求變化了之後,再來進行重構,每一次只要滿足當前需求就可以了,進行不斷的迭代,越來越趨近於客戶的想象。

雖然它解決了部分的問題,例如:文件沒有更新造成的誤解、過度設計帶來的開發進度失控、複雜性的增加、多做了無用功,但是它也有很明顯的缺點,就是它提倡的「簡單」,對於簡單大家都有自己的理解,同時缺乏了真是可見的模型之後,沒有設計,由開發人員進行重構的**會越來越難以閱讀和更改。同時這也是我鎖擔心的,同時我個人對於敏捷也是保留的。

資訊傳遞失真。

資訊傳遞失真是說,資訊在傳遞的過程中會迷失本來的意思,傳遞的環節越多,失真的度會越深,到最後可能就會變成另外乙個樣子。在中介紹了一下《資訊失真成本》。

資訊失真存在於各行各業,在我們的軟體行業也不例外。書中就例舉了例子,軟體分析人員和業務領域專家在一起工作了幾個月,一起建立了乙個正確的模型,模型也代表了正確的領域知識。然後將模型交給開發人員之後,開發人員在看到模型之後,可能會發現在模型中的有些概念不能被正確的轉換成**,然後他們就會以模型為基礎,加入自己的設計,雖然也可以實現模型,但是加入了很多自己的東西。隨著開發的繼續,更多的類被加入系統,原始模型和最終實現的差距就會越來越大。到最後,很難保證系統的質量,就算實現了,可是後面的維護呢?它能經得起實際環境的考驗嗎?後面還能擴充套件嗎?都可能會出現問題的。

當然了,書中舉這個例子,不光是為了說明資訊失真的,好像就沒有這個意思,是我自己想到的。它的本意是說乙個模型雖然正確,但不代表它容易轉換成**,或者它的實現違反了不推薦的設計模式。這樣的模型還是需要迭代的。我們應該選擇乙個更加容易和輕易轉化成**的模型。

產生上面問題的源泉就因為經過業務專家和軟體分析人員建立的模型,對於開發人員來講還是不適用的,有可能會違反軟體設計原則,或者沒有辦法很好的實現,以為建立模型的時候沒有考慮到開發這個因素。

書中給出的辦法就是讓開發人員參與到模型設計的過程中,減少模型在開發人員角度的失真,確保在設計模型的時候就考慮到後面的開發。

可是我覺得這也會產生問題。就是開發人員和業務人員的思考角度是不一樣的,甚至可以說是反著的,過早的參與模型,這時候模型還處於業務分析的階段,開發人員參與業務我覺得不太好。這個工作還是應該由架構師團隊來完成,架構師也是開發經驗豐富的人員,可以從開發角度來衡量模型的可效能,模型能否容易的轉換成**。可是減少後面開發的複雜性和不確定性。

所以說這個模型的建立除了業務專家、軟體分析人員,還有乙個重要的角色就是:架構師。架構師是聯絡業務和開發的角色。既可以盡早的參與模型的建立,發現業務流程的開發問題,為以後的開發掃清一些不必要的障礙。同時也可以思考後面的軟體架構和硬體架構(部署等問題),後續工作的分配。

中進行詳細的介紹。

C語言入門級教程

c語言入門級教程 icesongqiang 2016.10.17 常用資料型別 整型 int,short,long,c 11 long long 字元型 char 實型 float,double 列舉型別 enum 構造資料型別 結構體型別 陣列型別 指標型別 空型別 void 各種型別和其格式化輸...

DDD 領域驅動設計 教程

ddd domain driven design 領域驅動設計 是由eric evans最先提出,目的是對軟體所涉及到的領域進行建模,以應對系統規模過大時引起的軟體複雜性的問題。整個過程大概是這樣的,開發團隊和領域專家一起通過通用語言 ubiquitous language 去理解和消化領域知識,從...

C語言入門級教程二

c語言入門級教程 icesongqiang 2016.10.24 首先看彙編的前三行,1 表示將ia的值放入暫存器eax 2 將ia的值與暫存器eax中的值進行乘法運算 3 將暫存器eax中的值儲存到變數位址上。具體如下 1 首先將ia的值放入暫存器eax,可以看到eax中的值變成了0x000000...