一 爲何要有領域驅動設計?算法
首先,計算機技術的做用(特別是軟件技術)是爲了解決現實世界某一個領域的問題,脫離了這些問題,單純的算法,編程語言,或者操做系統都並無實際的意義。可是開發人員每每只喜歡研究技術問題,而忽視了領域問題的學習。例以下面一個例子:編程
「我要在這個項目中使用蘋果公司新推出的Swift語言,在服務器端使用Hadoop,最好再嘗試一下深度 學習方面的技術」,而後就一頭扎進這些時髦和高大上的技術之中。三個月後,你去問他須要解決的領域中的真實問題是什麼,他仍是一臉茫然。」服務器
這樣的開發人員就是興趣驅動型的開發人員。只追求技術,而忽視領域問題的軟件,質量天然也是沒法保證。編程語言
一個有力的觀點指出了這一點:布魯克斯老先生將維護軟件的「概念完整性」做爲軟件開發的核心問題。軟件之因此很複雜,難以維護,根本緣由就在於軟件概念的完整性遭到了破壞。甚至開發團隊的成員歷來就沒有意識到有必要去維護軟件概念的完整性,他們只是一些自行其是的開發人員,碰巧在於一個團隊中一塊兒堆代碼而已。oop
固然,在實際的開發過程當中,常常有軟件概念完整性遭到破壞的狀況發生,一部分緣由是開發人員喜歡追求高大上的技術,產品功能對他們來講只是甲方提的需求,他只用考慮技術上可否實現。另外一方面是產品設計人員缺少相關的素質,他們只能進行表面功能的設計,而沒法看到軟件須要解決的核心問題。最終形成功能設計和開發出來的功能徹底脫離了實際要解決的問題,功能沒法知足用戶需求,也代碼愈來愈難以維護,最終致使軟件開發的失敗。學習
因此,必需要有領域驅動設計,經過分析問題模型,提煉出良好的領域模型,最大程度的維護軟件概念的完整性,纔是保證軟件開發可以成功的關鍵。操作系統