Hacker News热文:请停止学习框架,学习领域驱动设计(DDD)(获500个点赞)
在 Hacker News 上獲得接近 500 個點贊的一篇名為《停止學(xué)習(xí)框架》的文章稱:
我們是程序員,每天都在了解最新的技術(shù),每天都在學(xué)習(xí)編程語言、框架和庫,因為我們知道的現(xiàn)代編程工具越多越好,對吧?
不停地追隨 Angular、React、Vue、Riot、Ember、Knockout 的腳步還真是一件有意思的事情呢。(譯注:反話)但這其實是在浪費時間!
時間是人類最寶貴的資源。時間是有限的、不可再生的,你可以用錢買任何東西,卻買不了時間。技術(shù),就像時尚,在以光速在變化著。為了趕上它,我們需要跑的非???。但是這個跑道上沒有終點,所以沒有贏家。
將你的黃金時間用于學(xué)習(xí)通用技能,那些不會過時的技能。
不要學(xué)習(xí)微服務(wù)框架,學(xué)習(xí)演進(jìn)式架構(gòu)(Evolutionary Architecture)。
不要學(xué)習(xí)新的編程語言,學(xué)習(xí)代碼整潔之道、設(shè)計模式、領(lǐng)域驅(qū)動設(shè)計(DDD)。
不要學(xué)習(xí) LeSS 和規(guī)?;艚菘蚣?#xff08;SAFe),學(xué)習(xí)精益生產(chǎn)原則。
不要學(xué)習(xí) Hystrix,學(xué)習(xí)容錯模式。
不要學(xué)習(xí) Docker,學(xué)成持續(xù)交付。
不要學(xué)習(xí) Angular、React 和 Vue,學(xué)習(xí) Web、HTTP 和 REST。
為什么要使用領(lǐng)域驅(qū)動設(shè)計?
從Eric Evans的《領(lǐng)域驅(qū)動設(shè)計:軟件核心復(fù)雜性應(yīng)對之道》一書的書名就可以看出這一方法論是為了解決軟件核心復(fù)雜性的。也就是說軟件業(yè)務(wù)越來越復(fù)雜了,領(lǐng)域驅(qū)動設(shè)計可以讓事情變得簡單。而實際情況是:領(lǐng)域驅(qū)動設(shè)計的門檻很高,沒有很深厚的面向?qū)ο缶幋a能力幾乎不可能實踐成功。
這一說法是否自相矛盾呢?Martin Fowler在PoEAA一書中給了一個有力的解釋:
我們把三層架構(gòu)等除了領(lǐng)域驅(qū)動之外的架構(gòu)方式都可以歸納為以數(shù)據(jù)為中心的架構(gòu)方式,在圖中是黑色的粗實線;領(lǐng)域驅(qū)動設(shè)計在圖中是綠色的粗實線。
當(dāng)軟件在開發(fā)初期,以數(shù)據(jù)驅(qū)動的架構(gòu)方式非常容易上手,但是隨著業(yè)務(wù)的增長和項目的推進(jìn),軟件開發(fā)和維護(hù)難度急劇升高。
領(lǐng)域驅(qū)動設(shè)計則在項目初期就處在一個比較難以上手的位置,但是隨著業(yè)務(wù)的增長和項目的推進(jìn),軟件開發(fā)和維護(hù)難度平滑上升。
這幅圖形象的解釋了領(lǐng)域驅(qū)動設(shè)計和傳統(tǒng)的軟件架構(gòu)模式兩者在軟件開發(fā)過程中解決復(fù)雜性之間的差異。
領(lǐng)域驅(qū)動設(shè)計的核心是什么?
戰(zhàn)略設(shè)計:
說到戰(zhàn)略設(shè)計,我們要站在一個比較高的視角來看待這個問題,戰(zhàn)略設(shè)計要解決的就是某個領(lǐng)域的問題,所以戰(zhàn)略設(shè)計時,我們要構(gòu)建好領(lǐng)域模型,保證我們的大方向是不會錯的
戰(zhàn)略設(shè)計主要從業(yè)務(wù)視角出發(fā),建立業(yè)務(wù)領(lǐng)域模型,劃分領(lǐng)域邊界,建立通用語言的限界上下文,限界上下文可以作為微服務(wù)設(shè)計的參考邊界。
以數(shù)據(jù)為中心的架構(gòu)模式
戰(zhàn)術(shù)設(shè)計 :
戰(zhàn)術(shù)設(shè)計則是要求我們從業(yè)務(wù)模型轉(zhuǎn)向微服務(wù)落地 我們會將領(lǐng)域模型中的領(lǐng)域?qū)ο笈c代碼模型中的代碼對象建立映射關(guān)系,將業(yè)務(wù)架構(gòu)和系統(tǒng)架構(gòu)進(jìn)行綁定。當(dāng)我們?nèi)ロ憫?yīng)業(yè)務(wù)變化調(diào)整業(yè)務(wù)架構(gòu)和領(lǐng)域模型時,系統(tǒng)架構(gòu)也會同時發(fā)生調(diào)整,并同步建立新的映射關(guān)系。也有演進(jìn)式架構(gòu)的含義在里面。
說到這里,大家可能對DDD有了一個粗略的,大體的認(rèn)識,我們可以理解到,DDD能夠幫助我們更好的在微服務(wù)的架構(gòu)中進(jìn)行合理的拆分,由于DDD要求我們建立標(biāo)準(zhǔn)的業(yè)務(wù)領(lǐng)域模型,所以DDD也能夠很好地幫助我們設(shè)計企業(yè)的中臺,DDD是一把利器,幫助我們解決架構(gòu)中遇到的問題和挑戰(zhàn)。
領(lǐng)域模型
DDD的優(yōu)勢及未來
DDD是一套完整而系統(tǒng)的設(shè)計方法,并非一種架構(gòu)。它能帶給你從戰(zhàn)略設(shè)計到戰(zhàn)術(shù)設(shè)計的標(biāo)準(zhǔn)設(shè)計過程,使得你的設(shè)計思路能夠更加清晰,設(shè)計過程更加規(guī)范,有助于提高技術(shù)人的架構(gòu)設(shè)計能力。無論是在新項目中設(shè)計微服務(wù),還是將系統(tǒng)從單體架構(gòu)演進(jìn)到微服務(wù),DDD 都大有助力。
倘若能一直保持DDD的開放性,保持DDD的獨立性,我覺得在未來的五年乃至十年,DDD仍將煥發(fā)生命力,只是它的面貌會更加多姿多彩,甚至超過Eric Evans對DDD的原初定義。畢竟,軟件系統(tǒng)的核心只有兩個:領(lǐng)域和算法。
為了幫助大家更快的了解和熟悉DDD驅(qū)動領(lǐng)域設(shè)計,這里給大家推薦一門高級架構(gòu)師Zilor的在線直播課程~從原理到代碼實戰(zhàn),全程干貨,帶你完整走一遍 DDD+ 微服務(wù)設(shè)計的全流程,重點講解其中的技術(shù)要點、設(shè)計原則和注意事項。希望能給對微服務(wù)、中臺等分布式架構(gòu)感興趣的朋友,帶來實質(zhì)性幫助~
如掃碼添加失敗
請加微信號:ruanmounetzry
超值福利免費送!!
掃碼獲取以上福利
僅限前200名
總結(jié)
以上是生活随笔為你收集整理的Hacker News热文:请停止学习框架,学习领域驱动设计(DDD)(获500个点赞)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Unit Testing》2.1 经典
- 下一篇: C#跨平台开源项目实战(WPF/Andr