從0開始寫框架(一)—開篇介紹

本文作者:羅海鵬,叩丁狼高級講師烈炭。原創(chuàng)文章,轉(zhuǎn)載請注明出處购岗。

概述

??我們這個系列的文章叫做“從0開始寫框架”刹缝,那從文章的標(biāo)題可以知道详炬,這系列的文章主要是講:一個java框架是如何開發(fā)出來的裙品∪趟危看到這里,可能已經(jīng)有部分小伙伴不明覺厲了溜徙。
??但其實洒宝,開發(fā)一個框架并不是什么很神秘、很高大上的事情萌京,就跟我們平時做業(yè)務(wù)類的項目差不多,這個差不多指的是開發(fā)形式上差不多宏浩。不一樣的地方就在于思想上要做一個轉(zhuǎn)變知残,我們要從使用別人提供的功能,轉(zhuǎn)變?yōu)樘峁┕δ芙o別人使用比庄。這看似很簡單的一句話求妹,但卻非常關(guān)鍵,所以有必要再強調(diào)一次:“提供功能給別人使用”佳窑。有過框架開發(fā)經(jīng)驗的開發(fā)者都知道制恍,在開發(fā)一個框架的過程中,都會不斷的對自己說神凑,“我這個功能是提供給別人用的净神,怎么才能讓別人用起來簡單一點,最好讓別人少寫代碼”溉委,“需要怎么提高性能和安全鹃唯,讓別人用起來安心一點”,“為了應(yīng)對某些人有特殊的需求瓣喊,所以必須要提高擴展性”坡慌。等等的這些話都是在我們開發(fā)一個框架的過程中,不斷提醒自己的藻三,而這些話洪橘,正是開發(fā)框架應(yīng)該具備的思想,在這些思想指引下棵帽,我們才會想方設(shè)法的使用各種技術(shù)來實現(xiàn)目標(biāo)熄求。
??回到我們做業(yè)務(wù)項目上,更多的是要求快點把功能完成逗概,為了達(dá)到這個要求抡四,我們就會不斷的提醒自己:“代碼重復(fù)不要緊,后面有時間再重構(gòu)”,“性能很差不要緊指巡,后面有時間再優(yōu)化”淑履,但往往后面就不會重構(gòu)和優(yōu)化了,因為那時藻雪,項目可能已經(jīng)很臃腫秘噪,看都不想去看了。這種情況勉耀,在開發(fā)框架項目上是絕對不能有的指煎,所以說開發(fā)框架的話,一定要轉(zhuǎn)變自己的思想便斥。
??還有一部分的小伙伴看到這個標(biāo)題后至壤,可能會想,標(biāo)題黨又來了枢纠,什么寫框架啊像街,到頭來估計又是在講概念,講思想就完事了晋渺。首先镰绎,概念和思想是肯定要講的,然后木西,我們才真正的從0開始去開發(fā)一個框架畴栖。但是,關(guān)鍵不是這個框架本身八千,而是做這個框架的過程吗讶,所以不要太在意接下來要做什么框架,解決什么問題恋捆。而是需要在意做框架的過程中关翎,它的方法和思想,這樣我們才能舉一反三鸠信,觸類旁通纵寝。

怎么理解“框架”

??可能很多小伙伴從學(xué)習(xí)java的那一刻起,就跟著老師說星立,這框架那框架的爽茴,但是老師從來沒有提過什么是框架,自己也沒有思考過绰垂,框架是什么室奏,就知道這個就是框架了,那個不是框架劲装,對框架的概念理解很模糊胧沫,那現(xiàn)在昌简,我們就來普及一些基礎(chǔ)常識,比如插件绒怨、框架纯赎、中間件這些術(shù)語的來龍去脈。
??首先南蹂,框架的出現(xiàn)是我們對于“復(fù)用性”的要求越來越高犬金,不想重復(fù)造輪子,從最初的單個函數(shù)的復(fù)用六剥,到面向?qū)ο笾蓄惖膹?fù)用晚顷,再到由多個類組成的lib包,提供類庫的復(fù)用疗疟。復(fù)用軟件的抽象層次越來越高该默,而框架就在這種背景下產(chǎn)生的〔咄框架復(fù)用是抽象層次的又一提升栓袖,框架的復(fù)用不僅僅是功能的復(fù)用,更是設(shè)計的復(fù)用锅锨。
??我們在來看看框架的含義:框架是一個半成品的應(yīng)用,它封裝了某領(lǐng)域內(nèi)處理流程的控制邏輯恋沃,由于軟件開發(fā)各種領(lǐng)域問題眾多必搞,所以框架必須具有針對性,比如囊咏,有針對底層通訊領(lǐng)域的框架恕洲,有針對分布式應(yīng)用領(lǐng)域的框架,有針對對象關(guān)系映射領(lǐng)域的框架等等梅割∷冢框架這個半成品應(yīng)用像是一個骨架,然后我們在這個骨架上添加血和肉户辞,就是我們具體的業(yè)務(wù)代碼了泌类,然后組成一個完整的應(yīng)用。
??框架我們就了解到這里底燎,接著我們來擴展一下刃榨,看看什么是插件,什么是中間件双仍。插件其實就類似我們上面提到的“類庫”了枢希,由于復(fù)用性的要求,我們需要把一些重復(fù)使用的功能抽取出來朱沃,而這個功能的實現(xiàn)又需要多個類組成苞轿,那么把這多個類打成一個包茅诱,以工具的形式提供某種類型的功能給別使用,就是類庫或者說插件了搬卒,它不能單獨成為一個應(yīng)用瑟俭。比如:二維碼生成工具、文件操作工具秀睛、報表生成工具等等尔当。打個比喻,如果說框架是骨架蹂安,我們的業(yè)務(wù)功能是血和肉椭迎,那么插件或者說工具類庫就像是:牙齒、頭發(fā)和指甲之類的了田盈,有它們最好畜号,沒有也不會死。最后來看看什么是“中間件”允瞧,不同于剛剛說的框架和插件简软,框架、插件和我們的業(yè)務(wù)代碼共同組成一個應(yīng)用述暂,而中間件它本身就是一個獨立運行痹升,并且是完整的一個應(yīng)用,不是半成品應(yīng)用畦韭,這種類型的應(yīng)用主要是對外提供某種領(lǐng)域的網(wǎng)絡(luò)服務(wù)給其他應(yīng)用使用疼蛾,比如:數(shù)據(jù)庫服務(wù)中間件,分布式緩存中間件艺配,消息隊列中間件察郁,搜索引擎中間件等等。打個比喻的話转唉,就是你的合伙人皮钠,你的隊友之類的,你們每個獨立的個體相互合作赠法,共同完成某個目標(biāo)麦轰。

具體目的

??該鋪墊的東西我們已經(jīng)鋪墊好了,接下來就要準(zhǔn)備動手開發(fā)這個框架了砖织。通過上面對框架的了解原朝,我們知道,每個具體的框架都是在解決特點領(lǐng)域問題的镶苞,那這樣的話喳坠,我們接下來要開發(fā)的這個框架是解決什么領(lǐng)域的問題呢?這個領(lǐng)域的選擇也是不能隨意的茂蚓,首先壕鹉,需要排除那些老舊的領(lǐng)域:比如ORM剃幌、MVC這些領(lǐng)域,因為這些領(lǐng)域制造不了多少話題晾浴。還要排除解決方案非常成熟的領(lǐng)域:比如底層通訊负乡,分布式應(yīng)用,這些領(lǐng)域因為發(fā)展的時間比較長脊凰,都比較成熟和完善了抖棘,也就沒有多大的必要再拿來研究。那經(jīng)過排除之后狸涌,我們就選擇現(xiàn)在比較熱門的話題切省,面試的時候也是經(jīng)常問到的,并且現(xiàn)階段帕胆,還沒有一個非常成熟的解決方案朝捆,就是:“分布式事務(wù)”,我們用這個領(lǐng)域的問題作為載體懒豹,去開發(fā)一個分布式事務(wù)框架芙盘。但是,還是需要再強調(diào)一下脸秽,我們的目的是學(xué)習(xí)框架的開發(fā)過程儒老,而不是這個具體的分布式事務(wù)框架。

注:阿里在18年年底開源了一個分布式事務(wù)框架:fescar记餐。地址為:https://github.com/alibaba/fescar驮樊,雖然現(xiàn)階段還不是很完善,但看阿里官方的規(guī)劃剥扣,后面的版本是會越來越強大的巩剖,大家有時間可以上去學(xué)習(xí)一下铝穷。

??在開發(fā)這個分布式事務(wù)框架的過程中钠怯,我們會學(xué)到很多技術(shù),學(xué)習(xí)這些技術(shù)才是我們開發(fā)這個框架的目的曙聂,而這些技術(shù)又是在平時我們做業(yè)務(wù)類的項目很少有機會接觸的晦炊,具體如下:

  • 注解的使用
    ??我們這里所說的注解的使用,并不是指平時我們做業(yè)務(wù)功能時宁脊,貼一個注解就完事的那種用断国,而是去定義一個注解,然后給該注解賦予一個意義榆苞,也就是說稳衬,我貼了這個注解,能幫我完成什么功能坐漏。在我們做業(yè)務(wù)項目的過程中薄疚,是很少有機會讓我們?nèi)ザx注解的碧信,而做框架就不一樣了,我們上文提到的街夭,做框架其中一個思想:易用性砰碴,如果你想讓你的框架,在給別人用的時候板丽,是很簡單的呈枉,那就需要考慮使用注解了,被人不用怎么去寫代碼埃碱,只需要貼個注解猖辫,然后框架就幫他做完了事情。
  • 并發(fā)的使用
    ??很多小伙伴經(jīng)常反映乃正,java下的并發(fā)包(concurrent)下的東西很少使用住册,我們?nèi)绻亲鰳I(yè)務(wù)類的項目,那確實是這樣的瓮具,但是如果我們要做框架荧飞,那就不是了,因為性能和安全也是做框架的一個指導(dǎo)思想名党,每時每刻都需要思考叹阔,什么功能需要使用多線程來提高性能,什么功能又會不會因為并發(fā)传睹,導(dǎo)致出現(xiàn)安全問題耳幢。在開發(fā)的時候就需要精心設(shè)計了,而不是說開發(fā)完了再優(yōu)化欧啤,不然的話睛藻,我相信做出來的框架不會有人敢冒險使用的。
  • SPI的使用
    ??SPI是Service Provider Interface的簡寫邢隧,這項技術(shù)也是平時我們做業(yè)務(wù)項目沒機會接觸的店印,我們知道,一個好的框架倒慧,肯定是一個擴展性很強的框架按摘,這個在我們上文講開發(fā)框架的指導(dǎo)思想時也提到了,也就是擴展性纫谅。接下來我們再慢慢揭開SPI的神秘面紗炫贤。
  • 設(shè)計模式的使用
    ??最后需要提及的技術(shù)就是設(shè)計思想,這個可以說是一個框架的靈魂了付秕,我們在講框架概念的時候提到兰珍,框架就是對軟件“復(fù)用性”的要求越來越高的產(chǎn)物,使用硬編碼是肯定不能達(dá)到“復(fù)用性”的要求的询吴,所以掠河,各種設(shè)計模式就應(yīng)運而生了励幼。在開發(fā)框架的過程中,我們會接觸一些業(yè)務(wù)項目沒機會接觸的設(shè)計模式口柳,比如動態(tài)代理模式苹粟,工廠模式,策略模式跃闹,適配器模式嵌削。
    ??學(xué)習(xí)以上的這些技術(shù)才是我為什么要寫這個專題文章的目的,我想每一個程序猿都有一個小目標(biāo)望艺,不是賺一個億苛秕,而是做架構(gòu)獅,當(dāng)然找默,架構(gòu)獅是會寫業(yè)務(wù)代碼的艇劫,因為任何開發(fā)語言的架構(gòu)獅都是從一線開發(fā)成長起來的,但是只會寫業(yè)務(wù)代碼的程序猿是不可能做架構(gòu)獅的惩激,而掌握以上技術(shù)店煞,就是成為架構(gòu)獅的第一步。

想獲取更多技術(shù)干貨风钻,請前往叩丁狼官網(wǎng):http://www.wolfcode.cn/all_article.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末顷蟀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子骡技,更是在濱河造成了極大的恐慌鸣个,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件布朦,死亡現(xiàn)場離奇詭異囤萤,居然都是意外死亡,警方通過查閱死者的電腦和手機是趴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門涛舍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人右遭,你說我怎么就攤上這事做盅$拖鳎” “怎么了窘哈?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長亭敢。 經(jīng)常有香客問我滚婉,道長,這世上最難降的妖魔是什么帅刀? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任让腹,我火速辦了婚禮远剩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘骇窍。我一直安慰自己瓜晤,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布腹纳。 她就那樣靜靜地躺著痢掠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嘲恍。 梳的紋絲不亂的頭發(fā)上足画,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音佃牛,去河邊找鬼淹辞。 笑死,一個胖子當(dāng)著我的面吹牛俘侠,可吹牛的內(nèi)容都是我干的象缀。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼爷速,長吁一口氣:“原來是場噩夢啊……” “哼攻冷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起遍希,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤等曼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后凿蒜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體禁谦,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年废封,在試婚紗的時候發(fā)現(xiàn)自己被綠了州泊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡漂洋,死狀恐怖遥皂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情刽漂,我是刑警寧澤演训,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站贝咙,受9級特大地震影響样悟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一窟她、第九天 我趴在偏房一處隱蔽的房頂上張望陈症。 院中可真熱鬧,春花似錦震糖、人聲如沸录肯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘁信。三九已至,卻和暖如春疏叨,著一層夾襖步出監(jiān)牢的瞬間潘靖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工蚤蔓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留卦溢,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓秀又,卻偏偏與公主長得像单寂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吐辙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 概述 ??我們這個系列的文章叫做“從0開始寫框架”宣决,那從文章的標(biāo)題可以知道,這系列的文章主要是講:一個java框架...
    LuoHaiPeng閱讀 1,080評論 0 9
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,093評論 1 32
  • JS的弱類型機制導(dǎo)致判斷變量類型是初級前端開發(fā)者面試時的必考題洼专,一般我都會將其作為考察候選人第一題,然后基于此展開...
    一顆開花的松樹閱讀 26,186評論 0 8
  • 這世上有兩個我 一個是愛你的我 一個是愛自己的我 愛你的我說 你是世上最美的女孩 愛自己的我說 你不是袁泉 也不是...
    Keppo_閱讀 148評論 1 1
  • 明一從夢中醒來時孵构,己是早上10點多了屁商,睜開雙眼的他最先看見的是高高懸掛在頭頂上方的呈三角尖錐形狀垂著水晶吊墜的...
    leelover閱讀 128評論 0 3