W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
軟件行業(yè)和建筑行業(yè)比較像,如果說我們的產(chǎn)品是一棟高樓大廈,那么程序代碼就是建筑高樓的磚坯(我們每天的工作就像是在不停"搬磚")。如果說軟件架構(gòu)是高屋建瓴,那么程序代碼是軟件架構(gòu)能夠準(zhǔn)確落地的關(guān)鍵構(gòu)成。
程序代碼如此重要,那么開發(fā)框架的重要性不言而喻。開發(fā)框架著力于代碼層面,解決通用性的技術(shù)問題,目的是使得開發(fā)人員能夠?qū)⒕﹃P(guān)注于業(yè)務(wù)本身、輔助軟件架構(gòu)能夠快速響應(yīng)業(yè)務(wù)變化、提高軟件的整體開發(fā)和維護(hù)效率。
本章節(jié)我們主要介紹統(tǒng)一開發(fā)框架建設(shè)的意義和必要性。
體系化更關(guān)注的是框架整體戰(zhàn)斗力,而不是每個(gè)模塊本身
框架體系化設(shè)計(jì)的顯著特點(diǎn):
我們這里的體系化是指微觀層面的代碼開發(fā)框架自頂向下統(tǒng)一設(shè)計(jì),使得整個(gè)框架的設(shè)計(jì)思想是一體的,而不是分散的。從技術(shù)上,解決一個(gè)具體的問題比較簡(jiǎn)單,開發(fā)一個(gè)特定的模塊也比較容易,但是如何將共性的問題進(jìn)行抽象沉淀、將各個(gè)獨(dú)立的模塊按照統(tǒng)一的設(shè)計(jì)思想組織協(xié)調(diào),并產(chǎn)生強(qiáng)大的綜合戰(zhàn)斗力卻不是一件簡(jiǎn)單的事情。這要求框架的設(shè)計(jì)師具備一定的技術(shù)底蘊(yùn)、經(jīng)驗(yàn)沉淀、格局和前瞻性,而不是眼界只關(guān)注于單個(gè)模塊本身。
例如,我們即使沒有開發(fā)過框架,但是應(yīng)該或多或少使用過,知道一個(gè)框架至少會(huì)包含哪些模塊。當(dāng)我們需要寫日志的時(shí)候,我們知道這種組件框架必定提供,那么會(huì)去框架中尋找并從官網(wǎng)獲得使用幫助。當(dāng)我們需要WebServer、數(shù)據(jù)庫(kù)訪問、模板引擎等等能力的時(shí)候,我們也可以預(yù)料得到,這種組件框架必定會(huì)有提供,那么也會(huì)去框架中尋找并從官網(wǎng)獲得使用幫助。
再例如,我們?cè)谑褂每蚣苤懈鞣N模塊的時(shí)候,雖然各個(gè)模塊都是低耦合設(shè)計(jì),按需引入使用,但是發(fā)現(xiàn)她們的配置管理方式都是一致的,都是結(jié)構(gòu)化的配置管理對(duì)象,通過相同的配置管理模塊,通過固定的配置項(xiàng)到配置對(duì)象屬性映射規(guī)則,通過Get/Set開頭的方法進(jìn)行讀取和設(shè)置(所有組件的參數(shù)獲取和設(shè)置也是Get/Set開頭的方法),全局的環(huán)境變量/啟動(dòng)參數(shù)設(shè)置也是類同的。這使得開發(fā)者能夠快速認(rèn)知到框架行為,做到快速接入、降低學(xué)習(xí)成本的目的。
再舉個(gè)例子,在框架層面有一個(gè)非常棒的特性 - 調(diào)試模式,通過一定的環(huán)境變量或者啟動(dòng)參數(shù)打開,當(dāng)開啟調(diào)試模式時(shí),各個(gè)模塊核心的邏輯中會(huì)打印一些關(guān)鍵的日志信息,更有利于疑難問題的調(diào)試。并且調(diào)試模式默認(rèn)關(guān)閉,不會(huì)影響執(zhí)行性能。要做到這一點(diǎn)特性,只有自頂向下、統(tǒng)一化設(shè)計(jì)的框架才能做得到。目前Golang開發(fā)語(yǔ)言下僅?GoFrame
?框架有此能力。
以上只是舉的幾點(diǎn)簡(jiǎn)單示例,如果您感興趣,可以從框架中發(fā)現(xiàn)更多有趣的點(diǎn)。
最后,我們可以想一想,為什么我們潛意識(shí)中能夠認(rèn)知到框架的行為、框架能夠提供極高的便捷性和極低的接入成本、框架模塊在"高內(nèi)聚,低耦合"的設(shè)計(jì)思想下卻整體有著非常高的組織協(xié)調(diào)性。為什么會(huì)造成這樣的現(xiàn)象?其實(shí)這就是框架采用體系化設(shè)計(jì),還是"東拼西湊"封裝 的差異。
舉個(gè)比較貼切的比喻:?GoFrame
?是一支紀(jì)律性、凝聚力和戰(zhàn)斗力極強(qiáng)的"正規(guī)軍",而不是"東拼西湊"的"散兵游勇"。
代碼層面也是需要有一系列的開發(fā)規(guī)范,如基本的 代碼結(jié)構(gòu)、分層模型、封裝設(shè)計(jì)等。統(tǒng)一的框架設(shè)計(jì),將會(huì)使得所有的業(yè)務(wù)項(xiàng)目按照統(tǒng)一的代碼設(shè)計(jì)進(jìn)行編碼,形成統(tǒng)一的開發(fā)規(guī)范。此外,框架的開發(fā)工具鏈也會(huì)使得開發(fā)規(guī)范更容易快速推廣和落地實(shí)施。
這里的統(tǒng)一化有兩層概念:
另一個(gè)痛點(diǎn)就是開發(fā)組件的百花齊放:
統(tǒng)一的開發(fā)框架才能將各個(gè)模塊"各自為政"的狀態(tài)收歸到"統(tǒng)一管理":
版本一致性問題主要來源于項(xiàng)目依賴的模塊過多、版本過多,造成版本很難以統(tǒng)一維護(hù)和升級(jí)。開發(fā)框架將模塊統(tǒng)一化管理后,更容易保證項(xiàng)目模塊的版本一致性。但是需要注意的是,這種一致性不是強(qiáng)一致性,只是降低了模塊及版本的維護(hù)復(fù)雜度,但是不一致性的問題依然存在。
行業(yè)內(nèi)也有一些版本強(qiáng)一致性的代碼管理方案,例如采用?Monorepo
?大倉(cāng)的代碼管理方式,卻各有利弊,可自行了解,這里不贅述。
基于統(tǒng)一的開發(fā)框架,更容易形成解決方案沉淀,企業(yè)與社區(qū)形成良性循環(huán)。解決方案的沉淀優(yōu)先采用工具以及代碼形式,而不是文檔。
當(dāng)每個(gè)團(tuán)隊(duì)都在試圖自己創(chuàng)造輪子時(shí),不僅無法形成統(tǒng)一的開發(fā)規(guī)范,而且會(huì)出現(xiàn)非常多的資源浪費(fèi)。
這在Golang語(yǔ)言流行的初期,或者一個(gè)初創(chuàng)公司技術(shù)體系不完善的初期,現(xiàn)象比較明顯。
讓項(xiàng)目組把精力更多的投入到業(yè)務(wù)中,相信這是大多數(shù)技術(shù)公司的共識(shí)。使用統(tǒng)一的開發(fā)架構(gòu),可以把共性的技術(shù)問題提煉出來,并形成通用的解決方案。避免每個(gè)項(xiàng)目都獨(dú)自去解決遇到的各種各樣的技術(shù)難題,有效的把精力釋放出來。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: