新聞中心
軟件行業(yè)和建筑行業(yè)比較像,如果說我們的產(chǎn)品是一棟高樓大廈,那么程序代碼就是建筑高樓的磚坯(我們每天的工作就像是在不停"搬磚")。如果說軟件架構是高屋建瓴,那么程序代碼是軟件架構能夠準確落地的關鍵構成。

程序代碼如此重要,那么開發(fā)框架的重要性不言而喻。開發(fā)框架著力于代碼層面,解決通用性的技術問題,目的是使得開發(fā)人員能夠將精力關注于業(yè)務本身、輔助軟件架構能夠快速響應業(yè)務變化、提高軟件的整體開發(fā)和維護效率。
本章節(jié)我們主要介紹統(tǒng)一開發(fā)框架建設的意義和必要性。
一、技術體系化
體系化更關注的是框架整體戰(zhàn)斗力,而不是每個模塊本身
框架體系化設計的顯著特點:
- 體系完善、組件豐富
- 規(guī)范統(tǒng)一、風格一致
- 統(tǒng)一抽象、設計嚴密
- 執(zhí)行高效,無重復邏輯
我們這里的體系化是指微觀層面的代碼開發(fā)框架自頂向下統(tǒng)一設計,使得整個框架的設計思想是一體的,而不是分散的。從技術上,解決一個具體的問題比較簡單,開發(fā)一個特定的模塊也比較容易,但是如何將共性的問題進行抽象沉淀、將各個獨立的模塊按照統(tǒng)一的設計思想組織協(xié)調,并產(chǎn)生強大的綜合戰(zhàn)斗力卻不是一件簡單的事情。這要求框架的設計師具備一定的技術底蘊、經(jīng)驗沉淀、格局和前瞻性,而不是眼界只關注于單個模塊本身。
例如,我們即使沒有開發(fā)過框架,但是應該或多或少使用過,知道一個框架至少會包含哪些模塊。當我們需要寫日志的時候,我們知道這種組件框架必定提供,那么會去框架中尋找并從官網(wǎng)獲得使用幫助。當我們需要WebServer、數(shù)據(jù)庫訪問、模板引擎等等能力的時候,我們也可以預料得到,這種組件框架必定會有提供,那么也會去框架中尋找并從官網(wǎng)獲得使用幫助。
再例如,我們在使用框架中各種模塊的時候,雖然各個模塊都是低耦合設計,按需引入使用,但是發(fā)現(xiàn)她們的配置管理方式都是一致的,都是結構化的配置管理對象,通過相同的配置管理模塊,通過固定的配置項到配置對象屬性映射規(guī)則,通過Get/Set開頭的方法進行讀取和設置(所有組件的參數(shù)獲取和設置也是Get/Set開頭的方法),全局的環(huán)境變量/啟動參數(shù)設置也是類同的。這使得開發(fā)者能夠快速認知到框架行為,做到快速接入、降低學習成本的目的。
再舉個例子,在框架層面有一個非常棒的特性 - 調試模式,通過一定的環(huán)境變量或者啟動參數(shù)打開,當開啟調試模式時,各個模塊核心的邏輯中會打印一些關鍵的日志信息,更有利于疑難問題的調試。并且調試模式默認關閉,不會影響執(zhí)行性能。要做到這一點特性,只有自頂向下、統(tǒng)一化設計的框架才能做得到。目前GOlang開發(fā)語言下僅?GoFrame?框架有此能力。
以上只是舉的幾點簡單示例,如果您感興趣,可以從框架中發(fā)現(xiàn)更多有趣的點。
最后,我們可以想一想,為什么我們潛意識中能夠認知到框架的行為、框架能夠提供極高的便捷性和極低的接入成本、框架模塊在"高內聚,低耦合"的設計思想下卻整體有著非常高的組織協(xié)調性。為什么會造成這樣的現(xiàn)象?其實這就是框架采用體系化設計,還是"東拼西湊"封裝 的差異。
舉個比較貼切的比喻:?GoFrame?是一支紀律性、凝聚力和戰(zhàn)斗力極強的"正規(guī)軍",而不是"東拼西湊"的"散兵游勇"。
二、開發(fā)規(guī)范化
代碼層面也是需要有一系列的開發(fā)規(guī)范,如基本的 代碼結構、分層模型、封裝設計等。統(tǒng)一的框架設計,將會使得所有的業(yè)務項目按照統(tǒng)一的代碼設計進行編碼,形成統(tǒng)一的開發(fā)規(guī)范。此外,框架的開發(fā)工具鏈也會使得開發(fā)規(guī)范更容易快速推廣和落地實施。
三、組件統(tǒng)一化
這里的統(tǒng)一化有兩層概念:
- 多個相同功能組件統(tǒng)一為一個組件。
- 多個不同功能組件統(tǒng)一到框架管理。
另一個痛點就是開發(fā)組件的百花齊放:
- 實現(xiàn)相同功能邏輯的模塊較多,選擇成本增加
- 項目依賴的模塊過多,項目整體的穩(wěn)定性會受到影響
- 項目依賴的模塊過多,項目無從下手是否應當升級這些模塊版本
- 各個模塊孤立設計,單獨看待每個模塊可替換性很高,開發(fā)體系難以建立,開發(fā)規(guī)范難以統(tǒng)一
統(tǒng)一的開發(fā)框架才能將各個模塊"各自為政"的狀態(tài)收歸到"統(tǒng)一管理":
- 框架自頂向下設計,形成體系化、統(tǒng)一化的模塊設計,更有利于開發(fā)規(guī)范化的實施
- 框架核心維護較全面的通用基礎模塊,降低基礎模塊選擇成本
- 我們只需要維護一個統(tǒng)一的框架版本,而不是數(shù)十個模塊版本
- 我們只需要了解一個框架的內容變化,而不是數(shù)十個模塊的內容變化
- 升級的時候只需要升級一個框架版本,而不是數(shù)十個模塊版本的升級
- 統(tǒng)一的模塊化設計可以減少不必要的邏輯實現(xiàn),提高模塊性能及易用性
- 減輕開發(fā)人員的心智負擔,提高模塊可維護性,更容易保證各業(yè)務項目的模塊版本一致性
四、版本一致性
版本一致性問題主要來源于項目依賴的模塊過多、版本過多,造成版本很難以統(tǒng)一維護和升級。開發(fā)框架將模塊統(tǒng)一化管理后,更容易保證項目模塊的版本一致性。但是需要注意的是,這種一致性不是強一致性,只是降低了模塊及版本的維護復雜度,但是不一致性的問題依然存在。
行業(yè)內也有一些版本強一致性的代碼管理方案,例如采用?Monorepo?大倉的代碼管理方式,卻各有利弊,可自行了解,這里不贅述。
五、解決方案沉淀
基于統(tǒng)一的開發(fā)框架,更容易形成解決方案沉淀,企業(yè)與社區(qū)形成良性循環(huán)。解決方案的沉淀優(yōu)先采用工具以及代碼形式,而不是文檔。
六、避免資源浪費
當每個團隊都在試圖自己創(chuàng)造輪子時,不僅無法形成統(tǒng)一的開發(fā)規(guī)范,而且會出現(xiàn)非常多的資源浪費。
這在Golang語言流行的初期,或者一個初創(chuàng)公司技術體系不完善的初期,現(xiàn)象比較明顯。
讓項目組把精力更多的投入到業(yè)務中,相信這是大多數(shù)技術公司的共識。使用統(tǒng)一的開發(fā)架構,可以把共性的技術問題提煉出來,并形成通用的解決方案。避免每個項目都獨自去解決遇到的各種各樣的技術難題,有效的把精力釋放出來。
文章標題:創(chuàng)新互聯(lián)GoFrame教程:GoFrame框架設計-統(tǒng)一框架設計
分享鏈接:http://www.5511xx.com/article/dppepgo.html


咨詢
建站咨詢
