為什麼DDD難以教授?
在日常工作中使用領域驅動設計的工作越多,就越能面對教學的難度。這是怎麼回事?DDD經常被誤解!我們也可以認為掌握DDD一件複雜的事情,需要掌握大量的知識和實踐。讓我們更具建設性,並試圖找到DDD教學領域的根本問題。
DDD要旨
DDD旨在解決軟體核心領域的複雜性問題。這意味著,在理想的世界中,您的軟體必須與其解決的問題一樣複雜。此外,您解決的問題必須是貴公司最有價值的事情。DDD提供瞭解決這些問題的模式(。實現DDD就是分析依賴關係。
戰術模式
戰術模式是我們開發人員最具體的部分,因為它是關於程式碼的!這是一套技術工具,可以在最重要的地方具體應用DDD方法。這些模式以與良好實踐相同的速度快速發展。一個眾所周知的例子是儲存庫模式。戰術模式有助於瞭解如何構建業務的每個部分。
戰略模式
戰略模式更抽象。它們允許將域(業務)分類為子域,以便了解如何圍繞它構建應用程式的上下文。每個上下文都有一個特定的通用業務語言(無處不在的語言),並使用精確的通訊方式。上下文是否將一些事情強加給另一個上下文?他們共享核心嗎?他們如何溝通?所有這些都可以使用戰略模式捕獲。它們有助於瞭解業務的不同部分以及它們如何相互作用。
DDD通常存在問題
自從我在2012年開始研究DDD以來,我遇到了兩個經常出現的問題。首先是新人(包括我)不知道從哪裡開始。他們覺得DDD很大,但參考書很嚇人。這些聰明人社群中使用你以前從未聽過的單詞似乎很好,但你覺得處在他們周圍卻很愚蠢,自己很難在這個社群留下來。
第二個是大多數人(也包括我)乍一看不會抓住戰略與戰術模式的二元性。更糟糕的是,他們可能會專注於戰術模式,因為它們看起來更具體。我們已經瞭解其中一些,如工廠或分層架構。結果可能是我們忽略了戰略模式。
根本原因分析
在我的DDD教學領域,我認為有兩個子領域:一個是戰術,另一個是戰略。
教授DDD的有效實施將為戰略模式繪製一個有界的上下文,為戰術模式繪製一個上下文。我們有幾個原因來證明這種實現的合理性。
第一條:不同的語言。這兩種語境具有特定的無處不在的語言。
第二條:不同的生命週期。戰術模式迅速發展。來自藍皮書大部分模式可以用更新的模式替換,如CQRS / ES或六邊形體系結構。戰略模式更加持久。
第三條:兩種情況下的抽象級別都不盡相同。
最後:戰略上下文更為重要。這是我的核心領域,是我在教授DDD時想要分享的核心價值觀。我的上下文之間存在明顯的依賴關係。戰術模式很重要,但如果我單獨教他們帶來價值不大。
現在有聊“為什麼DDD難以教授”答案的一部分:它混合了兩個非常不同的背景。兩者都很有用,一個比另一個更重要,但也更抽象,因此更難理解。
解決方案嘗試
DDD作者Eric在改善行業,提供戰略和戰術觀點方面確實雄心勃勃。我認為世界各地主要DDD會議的趨勢和出現證明了他的成功。我也理解他願意提供一些不太抽象的東西,以避免架構師患上象牙塔綜合症。
不過,戰略和戰術模式實際上是不同的野獸。DDD兩面性讓人難以理解。
我們如何管理這種複雜性?這取決於上下文。但是在為新手教授DDD的領域,我會強調戰略模式,主要是有界的上下文,因為這是可以導致所有其他模式的模式。然後我會解釋所有行業標準的良好實踐(持續整合,責任分離等等)都是實施核心領域的必要條件,DDD也將其命名為戰術模式。如果試圖反過來(將教導戰術部分作為DDD的重點介紹)會增加了錯過核心概念的風險。
相關文章
- 人,為什麼難以改變?
- 為什麼在 Plasma 上難以執行 EVMASM
- 創新演算法(ARIZ)為什麼難以理解?演算法
- 為什麼量子計算如此難以解釋? - quantamagazine
- 機器學習為什麼難以產品化? - kdnuggests機器學習
- 為什麼演算法的公平性令人難以捉摸?演算法
- DDD之1微服務設計為什麼選擇DDD微服務
- NER為什麼那麼難
- 為什麼GPT-3令人難以置信?有趣而且很重要? -VoxGPT
- 爆炒三年,人工智慧技術為什麼難以落地?人工智慧
- 為什麼Kubernetes這麼難? • Buttondown
- 這就是為什麼你學不會DDD
- 為什麼我越來越喜歡用DDD — DDD架構篇(1)架構
- 跑批為什麼會這麼難?
- 今年找工作為什麼這麼難?
- 【專案管理經驗分享】為什麼專案計劃難以完美執行?專案管理
- 為什麼做技術 PM 這麼難?
- 《仙劍1》的成功為什麼難以複製? 從體驗本身談體驗
- 幽默:為什麼DDD的Bounded Context翻譯為"有界上下文"?Context
- DDD三難困境解析
- 企業級BI為什麼這麼難做?
- 遊戲的留存為什麼那麼難調?遊戲
- Google 為什麼以 Flutter 作為原生突破口GoFlutter
- 我們為什麼很難堅持下去
- 為什麼Kubernetes的儲存如此艱難?
- 為什麼前端工作越來越難找了?前端
- 自動化測試落地為什麼那麼難
- 在遊戲裡“翻盤”為什麼那麼難?遊戲
- 為什麼在 Apple Silicon 上裝 Docker 這麼難APPDocker
- 貝葉斯推理:為什麼理性這麼難? - newyorker
- Java找工作為什麼越來越難,有什麼技巧嘛?Java
- 晤橋亞洲:一線城市廣州和深圳為什麼難以吸引大批投資者?
- 為什麼說要把人工智慧習以為常化人工智慧
- 為什麼基本型別可以呼叫方法——以字串為例型別字串
- DDD | 04-什麼是聚合根
- 為什麼在遊戲中製造幽默這麼難?遊戲
- 為什麼許可權授權很難?- osohq
- 以高位元組地址為字地址是什麼