寫框架需要的注意點(diǎn)

轉(zhuǎn)自:http://www.reibang.com/p/aa3208a1cdd0
首先要明確出于什么目的來寫框架拆祈,這個(gè)框架適用于什么場(chǎng)景,用來做什么的涕刚,框架的用戶對(duì)象是誰交排,他們會(huì)怎么使用,框架由誰維護(hù)扑媚,以后怎么發(fā)展等....

1.對(duì)于設(shè)計(jì)一個(gè)框架要先有一個(gè)初步的定位腰湾,比如它是一個(gè)緩存框架、Web MVC框架疆股、IOC框架费坊、ORM/數(shù)據(jù)訪問框架、RPC框架或是一個(gè)用于Web開發(fā)的全棧式框架旬痹。

2.是否要重復(fù)造輪子附井?除非是練手項(xiàng)目,一般我們是有了解決不了問題的時(shí)候才會(huì)考慮不使用既有的成熟的框架而重復(fù)造輪子的两残,這個(gè)時(shí)候需要列出新框架主要希望解決什么問題永毅。有關(guān)是否應(yīng)該重復(fù)造輪子的話題討論了很多,我的建議是在把問題列清后進(jìn)行簡單的研究看看是否可以通過擴(kuò)展現(xiàn)有的框架來解決這個(gè)問題人弓。一般而言大部分成熟的框架都有一定的擴(kuò)展和內(nèi)部組件的替換能力沼死,可以解決大部分技術(shù)問題,但在如下情況下我們可能不得不自己去寫一個(gè)框架崔赌,比如即使通過擴(kuò)展也無法滿足技術(shù)需求意蛀、安全原因耸别、需要更高的生產(chǎn)力、需要讓框架和公司內(nèi)部的流程更好地進(jìn)行適配浸间、開源的普適框架無法滿足性能需求太雨、二次開發(fā)的成本高于重新開發(fā)的成本等等。

2.主打輕量級(jí)魁蒜?輕量級(jí)是很多人打算自己寫一個(gè)新框架的原因,但我們要明白吩翻,大部分項(xiàng)目在一開始的時(shí)候其實(shí)都是輕量級(jí)的兜看,隨著框架的用戶越來越多,它必定需要滿足各種奇怪的需求狭瞎,在經(jīng)過了無數(shù)次迭代之后细移,框架的主線流程就會(huì)多很多擴(kuò)展點(diǎn)、檢測(cè)點(diǎn)熊锭,這樣框架勢(shì)必變得越來越重(從框架的

3.入口到框架的工作結(jié)束的方法調(diào)用層次越來越多弧轧,勢(shì)必框架也就越來越慢),如果你打算把框架定位于一個(gè)輕量級(jí)的框架的話碗殷,那么在今后的迭代過程中需要進(jìn)行一些權(quán)衡精绎,在心中有堅(jiān)定的輕量級(jí)的理念的同時(shí)不斷做性能測(cè)試來確保框架的輕量锌妻,否則隨著時(shí)間的發(fā)展框架可能會(huì)越來越重進(jìn)而偏離了開始的定位代乃。

4.特性?如果你打算寫一個(gè)框架仿粹,并且只有輕量級(jí)這一個(gè)理由的話搁吓,你或許應(yīng)該再為自己的框架想一些新特性,就像做一個(gè)產(chǎn)品一樣吭历,如果找不出兩個(gè)以上的亮點(diǎn)堕仔,那么這個(gè)產(chǎn)品不太可能成功,比如你的新框架可以是一個(gè)零配置的框架晌区,可以是一個(gè)前端開發(fā)也能用的后端框架摩骨。

5.其它?一般來說框架是給程序員使用的契讲,我們要考慮框架使用的頻度是怎么樣的仿吞,這可能決定的框架的性能需求和穩(wěn)定性需求。還有捡偏,需要考慮框架將來怎么發(fā)展唤冈,是希望走開源路線還是商業(yè)路線。當(dāng)然银伟,這些問題也可以留到框架有一個(gè)大致的結(jié)構(gòu)后再去考慮你虹。

6.通過分析現(xiàn)有框架的功能绘搞,可以制定出一個(gè)新框架要實(shí)現(xiàn)的功能列表。

7.通過分析現(xiàn)有框架的問題傅物,總結(jié)出新框架需要避免的東西和改善的地方夯辖。

8.通過閱讀現(xiàn)有框架的源碼,幫助自己理清框架的主線流程為總體設(shè)計(jì)做鋪墊(后面總體設(shè)計(jì)部分會(huì)更多談到)董饰。

9.如果能充分理解現(xiàn)有的框架蒿褂,那么你就是站在巨人的肩膀上寫框架,否則很可能就是在井底造輪子卒暂。

注意:

(1):新開發(fā)一個(gè)框架的好處是沒有兼容歷史版本的包袱啄栓,但是責(zé)任也同樣重大,因?yàn)槿绻麑?duì)于一開始的定位或設(shè)計(jì)工作沒有做好的話也祠,將來如果要對(duì)格局進(jìn)行改變就會(huì)有巨大的向前兼容的包袱(除非你的框架沒有在任何正式項(xiàng)目中使用)昙楚,兼容意味著框架可能會(huì)越來越重,可能會(huì)越來越難看诈嘿,閱讀至少一到兩個(gè)開源實(shí)現(xiàn)堪旧,做好充分的調(diào)研工作可以使你避免犯大錯(cuò)。

(2):假設(shè)我們?cè)u(píng)估了一些主流框架后已經(jīng)很明確奖亚,我們的MVC框架是一個(gè)Java平臺(tái)的淳梦、基于Servlet的輕量級(jí)的Web MVC框架,主要的理念是約定優(yōu)于配置遂蛀,高內(nèi)聚大于低耦合谭跨,提供主流Web MVC框架的大部分功能,并且易用方面有所創(chuàng)新李滴,新特性體包括:

10:起手零配置螃宙,總體上約定由于配置,即使需要擴(kuò)展配置也支持通過代碼和配置文件兩種方式進(jìn)行配置所坯。

11:除了Servlet之外不依賴其它類庫谆扎,支持通過插件方式和諸如Spring等框架進(jìn)行整合。

12:更優(yōu)化的項(xiàng)目結(jié)構(gòu)芹助,不需要按照傳統(tǒng)的Java Web項(xiàng)目結(jié)構(gòu)那樣來分離代碼和WEB-INF堂湖,視圖可以和代碼在一起,閱讀代碼更便利状土。

13:攔截器和框架本身更緊密无蜂,提供Action、Controller和Global三個(gè)級(jí)別的"攔截器"(或者說過濾器)蒙谓。

14:豐富的Action的返回值斥季,返回的可以是視圖、可以是重定向、可以是文件酣倾、可以是字符串舵揭、可以是Json數(shù)據(jù),可以是Javascript代碼等等躁锡。

15:支持針對(duì)測(cè)試環(huán)境自動(dòng)生成測(cè)試的視圖模型數(shù)據(jù)午绳,以便前端和后端可以同時(shí)開發(fā)項(xiàng)目。

16:支持在開發(fā)的時(shí)候自動(dòng)生成路由信息映之、模型綁定拦焚、異常處理等配置的信息頁面和調(diào)試頁面笼才,方便開發(fā)和調(diào)試葱椭。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市尽爆,隨后出現(xiàn)的幾起案子抬伺,更是在濱河造成了極大的恐慌,老刑警劉巖灾梦,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件峡钓,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡若河,警方通過查閱死者的電腦和手機(jī)能岩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萧福,“玉大人拉鹃,你說我怎么就攤上這事■耆蹋” “怎么了膏燕?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悟民。 經(jīng)常有香客問我坝辫,道長,這世上最難降的妖魔是什么射亏? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任近忙,我火速辦了婚禮,結(jié)果婚禮上智润,老公的妹妹穿的比我還像新娘及舍。我一直安慰自己,他們只是感情好窟绷,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布锯玛。 她就那樣靜靜地躺著,像睡著了一般钾麸。 火紅的嫁衣襯著肌膚如雪更振。 梳的紋絲不亂的頭發(fā)上炕桨,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音肯腕,去河邊找鬼献宫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛实撒,可吹牛的內(nèi)容都是我干的姊途。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼知态,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼捷兰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起负敏,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤贡茅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后其做,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體顶考,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年妖泄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了驹沿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蹈胡,死狀恐怖渊季,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情罚渐,我是刑警寧澤却汉,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站搅轿,受9級(jí)特大地震影響病涨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜璧坟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一既穆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧雀鹃,春花似錦幻工、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春踢代,著一層夾襖步出監(jiān)牢的瞬間盲憎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國打工胳挎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留饼疙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓慕爬,卻偏偏與公主長得像窑眯,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子医窿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,516評(píng)論 25 707
  • 轉(zhuǎn)自:[http://blog.csdn.net/liu88010988/article/details/5154...
    hackywit閱讀 5,990評(píng)論 0 26
  • 你是不是對(duì)每天如何搭配衣服感到煩惱姥卢?你是不是渴望擁有一件百搭單品卷要,天天都有不同的新搭配呢?百搭的黑色適合不同場(chǎng)合独榴,...
    阿明老師閱讀 173評(píng)論 0 3
  • 2000年前后却妨,在香港坐公交是件痛苦的事。香港公交沒有售票員括眠,當(dāng)然也沒有找零。所以香港人出門口袋里都有一大把硬幣倍权。...
    Solomone閱讀 726評(píng)論 0 0
  • 生機(jī)盎然的季節(jié)掷豺,最適合背起行囊踏青,沿一條小路尋找春的足跡薄声〉贝靠近自然,靠近春天默辨。用眼睛去看草長鶯飛德频;用耳朵去聽泉水...
    耶稼淮閱讀 235評(píng)論 0 0