DDD是不是過度工程理論?
“僅在複雜域中使用DDD”,這是DDD專家用來避免迴避“是否銀彈”爭論的口頭禪,這樣至少可以避免不愉快的爭論。
但是我們想知道到底什麼是複雜的域?這樣才能知道何時使用DDD。
從戰略角度來看,我們可以隨時使用DDD,剩下的問題是:我應該何時從戰術角度使用DDD?我什麼時候應該實現六邊形架構,CQRS / ES和其他類似的東西呢?
不在CRUD軟體中?
無論我們選擇何種實現,軟體都是業務抽象。當我們選擇CRUD實現時,我們打賭未來的軟體將具有很少的功能。我們打賭我們不需要很多抽象。由於領域的認知負荷將保持低水平,這意味著我們可以將業務邏輯與技術術語混合,而無需構建難以管理的軟體。
根據我的經驗,許多應用程式都是以簡單的CRUD開始的,但它們很快就發展成為對業務更復雜和有用的東西。不幸的是,我們將它們編碼為簡單的CRUD,這導致了大量的混亂。當然不是故意的,日復一日地增加一點複雜性使得很難抓住解決方案的整體複雜性。我們是沸水的青蛙而不自知。
過度工程理論
挑戰在於找到在什麼時候我們的簡單CRUD應用程式成為更復雜的業務應用程式?
我的理論是,我們一直在考慮戰術DDD過度工程的模式。因為我們無法感受到我們日復一日建立的軟體的複雜性。但是當我們開始另一個專案時會發生什麼?肯定願意從頭開始重寫整個軟體。
尋找拐點
我們想要找到實施戰術DDD模式變得有趣的時候,儘管它有成本。
解決方案的一部分可能是檢查新來者需要多長時間才能進入生產級別工作編碼?當這個過程時間太長時,說明還有改進的餘地,而戰術模式可以幫助降低程式碼複雜性。幫助提高新人快速進入生產能力的效率。
另一種解決方案可能是要求不同的DDD專家進行一些稽核,但可能會更昂貴。
一個更簡單的解決方案可能是假設軟體將變得更加複雜。這意味著我們應該日復一日地研究哪種戰術模式能夠滿足我們的需求。
請記住,戰術DDD模式是一個全世界的實踐,全部使用所有這些模式是不可取的。在合適的時間挑選好的又是困難的。
我什麼時候應該使用戰術DDD模式?
我沒有一個明確的答案,只是一個經驗觀察:我已經看到無數的軟體以CRUD方式實現,這將透過DDD戰術方法得到極大改善。我已經看到沒有使用戰術DDD方法實現的軟體可以透過CRUD實現大大改進。
“如果你認為好的設計是昂貴的,你應該看看糟糕設計的成本。”
相關文章
- DDD悖論:DDD是不是銀彈?
- 跨越DDD從理論到工程落地的鴻溝
- DDD理論學習系列(3)-- 限界上下文
- MLOps是過度工程嗎?- Reddit
- 【軟體工程理論與實踐】Homework(四.1)軟體工程
- DDD當前工程方法組合 - Kamil
- 可落地的DDD的(2)-為什麼說MVC工程架構已經過時MVC架構
- DDD之理解複雜度、尊重複雜度、掌控複雜度複雜度
- 【軟體工程理論與實踐】Homework(一.2,3)軟體工程
- 資料蔣堂|Hadoop中理論與工程的錯位Hadoop
- orientDB學習筆記(一)六度分隔理論筆記
- 分散式理論(二) - BASE理論分散式
- 神經網路理論與工程實戰-知識積累神經網路
- 工程學導論
- 理論
- 透過重構來加深理解——DDD
- 自然場景文字檢測工程中使用所以程式碼和理論
- 理論+實驗 詳解Oracle安裝部署過程Oracle
- 資訊理論理論學習筆記筆記
- CAP理論
- 衰老理論
- 【資料蔣堂】第48期:Hadoop中理論與工程的錯位Hadoop
- 軟體測試理論(1)基礎理論
- 最新 Flutter 團隊工程師中文演講 | Flutter 的效能測試和理論Flutter工程師
- 《工程導論》----第三章:工程、技術、與工程師工程師
- 基於TRIZ理論的創新點子產生過程
- 多程序理論
- RocketMQ - 理論篇MQ
- BlockingQueue理論普BloC
- JWT理論理解JWT
- 測試理論
- 解析-理論剖析
- 計算理論導論筆記筆記
- 《產品經理面試攻略》PART 10:度過試用期面試
- 軟體工程-論文查重軟體工程
- 【進階】數論函式求和(理論)函式
- 激勵方法論2、雙因素理論
- 基礎理論01