亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                Alibaba/IOC-golang 正式開源

                Alibaba/IOC-golang 正式開源

                作者 | 李志信(冀鋒)來源 | 阿里開發(fā)者公眾號

                IOC(inversion of control)即控制反轉(zhuǎn),是面向對象編程中的一種設(shè)計(jì)原則,可以用來減低計(jì)算機(jī)代碼之間的耦合度。IOC-golang 是一款服務(wù)于Go語言開發(fā)者的依賴注入框架,基于控制反轉(zhuǎn)思路,方便開發(fā)人員搭建任何 Go 應(yīng)用。

                在本文中,我不會羅列這個(gè)項(xiàng)目的種種功能與實(shí)現(xiàn),而是站在開發(fā)者的角度,談一談我認(rèn)為 Go 應(yīng)用開發(fā)的“理想姿態(tài)”。

                項(xiàng)目背景

                在面向?qū)ο缶幊痰乃悸废拢_發(fā)者需要直接關(guān)心對象之間的依賴關(guān)系、對象的加載模型、對象的生命周期等等問題。對于較為復(fù)雜的業(yè)務(wù)應(yīng)用系統(tǒng),隨著對象數(shù)目增長,對象之間的拓?fù)?/a>關(guān)系呈指數(shù)級增加,如果這些邏輯全部由開發(fā)人員手動設(shè)計(jì)和維護(hù),將會在應(yīng)用內(nèi)保存較多業(yè)務(wù)無關(guān)的冗余代碼,影響開發(fā)效率,提高代碼學(xué)習(xí)成本,增加了模塊之間的耦合度,容易產(chǎn)生循環(huán)依賴等等問題。

                隨著開發(fā)者的增多,設(shè)計(jì)模型的復(fù)雜化,將會產(chǎn)生對象管理框架的訴求,例如 Java 生態(tài)的 Spring 框架,其設(shè)計(jì)的核心就是控制反轉(zhuǎn)思路,從而為開發(fā)者提供依賴注入、配置注入、生命周期管理等能力。Go 語言生態(tài)在開源側(cè)也有較多基于該思路的實(shí)現(xiàn),但普遍能力較為單一,相比于我們的設(shè)計(jì)思路 ,在可擴(kuò)展性、易用性等方面有所不足。

                IOC-golang 不是 Go 語言實(shí)現(xiàn)的 Spring 框架!

                我們致力于打造一款針對 Go 開發(fā)人員的框架,它適配與 Go 的語法和各種基本概念,符合 Go 語言開發(fā)習(xí)慣,能真正為開發(fā)人員提供編程、思考、運(yùn)維、以及代碼閱讀上的便利。

                設(shè)計(jì)思路

                讓我們聊一些輕松的話題。

                應(yīng)用開發(fā)思路

                應(yīng)用程序多種多樣,都是由開發(fā)人員一行一行代碼編寫出來的,身為開發(fā)人員,在編寫代碼之前,一定是對接下來要寫的每一行代碼有初步的思考與設(shè)計(jì)。例如,我身為一個(gè) Go 開發(fā)人員,如果期望編寫一個(gè)web 后端服務(wù)程序,那么我會怎么做?

                最直觀的思路,我需要啟動一個(gè)http server,用于監(jiān)聽某個(gè)端口,并且處理http協(xié)議的請求。使用面向?qū)ο蟮乃悸?,我需要?gòu)建一個(gè)http server對象,之后調(diào)用方法開啟監(jiān)聽。再往下一層思考,這個(gè)http server 對象如果要創(chuàng)建出來,需要依賴一些對象,這些對象可能包含:多個(gè) http handler 對象、用于可視化上報(bào)的對象、管理安全認(rèn)證的對象等等。再下一層,一個(gè)http handler 對象依賴的對象有:負(fù)責(zé)執(zhí)行序列化操作的對象、傳輸結(jié)構(gòu)對象、業(yè)務(wù)處理對象;業(yè)務(wù)處理對象又依賴一些sdk,例如緩存客戶端對象、數(shù)據(jù)庫客戶端對象等等。我們現(xiàn)在層層思考的過程,也就是自頂向下的設(shè)計(jì)模型。

                我們可以把一個(gè)復(fù)雜的應(yīng)用程序,根據(jù)依賴關(guān)系,抽象為一個(gè)具有單起點(diǎn)的有向圖,以上面描述的場景為例,我們可以畫出具有如下拓?fù)涞膱D。

                腦海中有了這些拓?fù)?,就可以按照?xí)慣的方式編寫代碼了,我可能選擇先把未實(shí)現(xiàn)的模塊抽象成接口,由上至下編寫結(jié)構(gòu),我也可能習(xí)慣自底向上開發(fā),先從最具體的底層結(jié)構(gòu)入手,然后用多個(gè)子結(jié)構(gòu)組成一個(gè)完整的上層結(jié)構(gòu)。無論選擇哪種實(shí)現(xiàn)方案,我在開發(fā)時(shí)總會關(guān)心一件事情:我要開發(fā)的結(jié)構(gòu),是由哪些結(jié)構(gòu)組成的,我把這個(gè)事情稱作一個(gè)“開發(fā)單元”,這也是IOC-golang 框架關(guān)心的主要問題之一。

                按照常規(guī)的應(yīng)用開發(fā)模式,在一個(gè)“開發(fā)單元”內(nèi),開發(fā)者需要關(guān)注哪些事情?我們習(xí)慣于編寫一個(gè)構(gòu)造函數(shù)返回需要的對象,這個(gè)構(gòu)造函數(shù)的入?yún)?,包含了一些參?shù)以及下游依賴,我們在構(gòu)造函數(shù)中會把這些對象和參數(shù)拼接成一個(gè)結(jié)構(gòu),再執(zhí)行初始化邏輯,最后返回。

                我們把這個(gè)“開發(fā)單元”關(guān)心的東西,按照依賴關(guān)系抽象成下圖。

                也就是說,如果想基于一個(gè)結(jié)構(gòu)構(gòu)造出一個(gè)對象,我們最多需要提供這三個(gè)東西就夠了:參數(shù)/配置、依賴的子對象和一段包含初始化邏輯的函數(shù),當(dāng)然對于一些簡單的結(jié)構(gòu),可能只需要三者中的一兩者,甚至都不需要。按照這一思路,開發(fā)人員可以把 “編寫一個(gè)應(yīng)用” ,拆分成若干個(gè) “構(gòu)造一個(gè)對象”的過程,二者是等價(jià)的,我們都在編碼的過程中,潛移默化地做了這件事情。

                點(diǎn)擊鏈接查看原文,關(guān)注公眾號【阿里開發(fā)者】獲取更多福利!https://mp.weixin.qq.com/s/Ar-JdkrQ5NnCWcGOoCuVgg

                鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
                用戶投稿
                上一篇 2022年6月19日 18:20
                下一篇 2022年6月19日 18:21

                相關(guān)推薦

                • ios手游模擬器(手游模擬器ios)

                  本文主要講的是ios手游模擬器,以及和手游模擬器ios相關(guān)的知識,如果覺得本文對您有所幫助,不要忘了將本文分享給朋友。 哪個(gè)iOS模擬器能多開手游賬號?可以推薦個(gè)好用的模擬器給我嗎…

                  2022年11月27日
                • 短視頻策劃內(nèi)容的3個(gè)要點(diǎn)(短視頻策劃內(nèi)容怎么做)

                  短視頻在制作時(shí),內(nèi)容框架非常重要。如果直奔主題,然后結(jié)束,聚卓告訴你,這樣的短視頻已經(jīng)過時(shí)了?,F(xiàn)在的短視頻需要框架的,但不是任何框架,它需要一種易于理解和消化的框架。而且,現(xiàn)在大多…

                  2022年11月27日
                • 存儲過程語法(sql server存儲過程語法)

                  今天小編給各位分享存儲過程語法的知識,其中也會對sql server存儲過程語法進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧! oracle存儲過程基本語法…

                  2022年11月26日
                • 游戲平臺有哪些(游戲平臺有哪些)

                  簡要回答 游戲平臺指的是多人通過互聯(lián)網(wǎng)在線游戲的平臺,例如qq游戲,聯(lián)眾世界,浩方電競平臺,VS競技游戲平臺等,只要你下載平臺,下載相關(guān)游戲,就能實(shí)現(xiàn)對戰(zhàn),擺脫了局域網(wǎng)的限制。 詳…

                  2022年11月25日
                • 園屬于什么結(jié)構(gòu)(園的結(jié)構(gòu)和部首)

                  園 yuán:全包圍結(jié)構(gòu),平穩(wěn)端正中稍帶左收右展。 外部“口” 體態(tài)端莊,稍抗肩,稍帶左輕右重。左豎起筆稍抖,豎身勿重,稍左斜,垂露收筆;第二筆橫折壓著左豎起筆,橫畫稍抗肩,不要重…

                  2022年11月24日
                • 馬斯克凌晨一點(diǎn)半曬“代碼審查”現(xiàn)場,編排他的段子比瘋狂星期四還多

                  夢晨 Pine 發(fā)自 凹非寺 量子位 | 公眾號 QbitAI 每一個(gè)真正會寫代碼的人,請?jiān)谙挛?點(diǎn)到總部10層報(bào)到。 每一個(gè)真正會寫代碼的人,請?jiān)谙挛?點(diǎn)到總部10層報(bào)到。 馬斯…

                  2022年11月21日
                • c語言大佬是什么意思網(wǎng)絡(luò)用語(c語言系列大佬)

                  網(wǎng)絡(luò)用語在生活中使用也是非常多的,大家對這些新的詞語含義也都十分好奇,c語言大佬是什么意思?近日在b站還有抖音等平臺的評論區(qū)中也經(jīng)常看到c語言大佬這個(gè)詞,大家對此十分好奇,下面跟小…

                  2022年11月17日
                • 短視頻腳本范文(視頻腳本怎么寫)

                  短視頻腳本,是故事的發(fā)展大綱。我們在拍攝視頻前,需要在腳本中確定整個(gè)視頻的整體框架。 事件發(fā)生的時(shí)間、地點(diǎn),其中有哪些人物,每個(gè)人物有哪些臺詞、動作,每個(gè)畫面拍攝的景別分別是什么,…

                  2022年11月13日
                • 網(wǎng)站客服代碼(網(wǎng)站客服代碼實(shí)現(xiàn)移動端隱藏,電腦端展開)

                  本文主要講的是網(wǎng)站客服代碼,以及和網(wǎng)站客服代碼實(shí)現(xiàn)移動端隱藏,電腦端展開相關(guān)的知識,如果覺得本文對您有所幫助,不要忘了將本文分享給朋友。 在線客服系統(tǒng)代碼是什么? 在線客服系統(tǒng)代碼…

                  2022年11月12日
                • 8字頭股票什么意思(8字頭股票什么意思呀)

                  北京證券交易所股票是以4和8開頭1北京證券交易所是以現(xiàn)有的新三板精選層為基礎(chǔ)組建,進(jìn)一步提升服務(wù)中小企業(yè)的能力,打造服務(wù)創(chuàng)新型中小企業(yè)主陣地北京證券交易所是因?yàn)槲覀儑乙С种行∑蟆?/p>

                  2022年11月11日

                聯(lián)系我們

                聯(lián)系郵箱:admin#wlmqw.com
                工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息