自己動手寫框架?第一次接觸這本書的讀者可能會有一些驚訝。是的,這就是寫本書的緣由。
1.1 緣由從畢業(yè)以來,我一直從事軟件開發(fā)及軟件管理,做過大量的項目與產(chǎn)品,但是還是喜歡平臺軟件及軟件管理方面的工作。多年的業(yè)務(wù)開發(fā)及平臺構(gòu)建的過程中,踩了許許多多的坑,也積累了許許多多的經(jīng)驗。
和很多的朋友一樣,在沒有開發(fā)框架之前,可能我們只有一些落在紙面上的編碼規(guī)范,或者說是開發(fā)約定。但不管怎么說,這些規(guī)范和約定對于我們軟件開發(fā)過程還是有相當(dāng)?shù)闹笇?dǎo)與規(guī)范作用的。再后來,隨著時間的推移,我們的軟件代碼寫得越來越多,它們中的一部分具有相當(dāng)?shù)耐ㄓ眯?,可能就會變成一個公共庫;它們其中的一部分,在整體的運行機制來說是統(tǒng)一的,可以抽取成公共的部分,但是有一部分又會業(yè)務(wù)性非常強,需要在實際做業(yè)務(wù)的時候進(jìn)行擴展。
于是,這部分就會演變成框架!不過,這個過程往往是困難重重。
我們也深知這個道理,依靠一個全新框架做所有的事情,可謂篳路藍(lán)縷。第一是從時間精力上不可能的;第二是沒有足夠的能力與水平做所有的事情;第三,普適性與專業(yè)性方面也不能做到良好的平衡;第四,技術(shù)的發(fā)展變化是那么快,不能快速適應(yīng)變化,就只能被淘汰。因此,從框架設(shè)計初始,首先應(yīng)該是從體系化方面考慮,構(gòu)建一個生態(tài)圈,由所有志同道合的程序員來來共同加入生態(tài)圈,最終做到越用越強,越用越好用的效果!同時,框架的學(xué)習(xí)成本必須非常低,這樣才可以讓使用者更容易上手,避免由于學(xué)習(xí)難度大而導(dǎo)致的學(xué)習(xí)曲線太陡、太長。
我們也知道,構(gòu)建一個框架,明顯不僅僅是掌握某種語言的編程技術(shù)所能完成的:這需要充分考慮架構(gòu)、開發(fā)、測試、打包、發(fā)布、部署、維護(hù)等各個環(huán)節(jié)的各個參與者的需求及期望;這需要對現(xiàn)有各種框架的優(yōu)點、缺點有充分的了解,需要對自己框架的理念、原則、目標(biāo)、策略有清晰的定位與認(rèn)識;這需要有敏銳的嗅覺,可以感受得到某些壞味道,而這種嗅覺就需要經(jīng)年的積累。所以,好的框架應(yīng)該是“品”出來的!
正是基于這樣的愿景,我們已經(jīng)走過了近5個年頭,實際上在真正開始之前已經(jīng)做了諸多的準(zhǔn)備工作,更多的是在整個軟件架構(gòu)中蘊含了構(gòu)建者多年軟件從業(yè)所積累的豐富經(jīng)驗,以及通過踩下的無數(shù)的坑所積累起來的經(jīng)驗。開始的是一個人的堅守,現(xiàn)在已經(jīng)形成了一個緊密團結(jié)且互補性強的團隊,團隊成員每個人都有自己的特色,但是都有一個共同的特點,那就是:對軟件事業(yè)的熱愛。
因此,這本書就是幫助你,一步一步實現(xiàn)一個基于J2EE技術(shù)的應(yīng)用開發(fā)框架!
1.2 認(rèn)識框架通過這本書,我們將搭建一個基于J2EE技術(shù)的應(yīng)用開發(fā)框架,可以用來開發(fā)各種Java Application和Web Application。就像一個襁褓中的新生嬰兒,我們也給框架取了一個名字——Tiny。權(quán)且當(dāng)作一個小名吧。
1.Tiny名稱的來歷
取名Tiny是取其微不足道,微小之意。我們認(rèn)為,一個J2EE開發(fā)框架是非常復(fù)雜的,只有把框架分解成非常細(xì)小、可控的部分,并且對每個細(xì)小、可控的部分都有一個最優(yōu)解或相對最優(yōu)解,那么整個方案也就可以非常不錯的落地。
Tiny Framework是作者在多年框架構(gòu)建經(jīng)驗積累上的嘔心瀝血之作,是作者在軟件實踐中吃了無數(shù)的苦,受了無數(shù)的累之后,立足于解決軟件的開發(fā)、測試、發(fā)布、實施全生命周期存在的多種“疑難雜癥”所開發(fā)的軟件開發(fā)平臺。往小了說,可以用于編寫一個HelloWorld,再大些可用于快速搭建一個網(wǎng)站,往大了說,可以用于構(gòu)建一個7*24小時永不停止服務(wù)的互聯(lián)網(wǎng)應(yīng)用。構(gòu)建者對軟件框架的一個重要理解就是Think big, start small, scale fast。所以,Tiny框架沒有什么是不可以進(jìn)行擴展的,也沒有什么是不可以被替換的。所以,只要你是J2EE領(lǐng)域的參與者,Tiny框架都值得你一看、一試、一用。
2. Tiny框架的構(gòu)建策略
Think big, start small, scale fast。想法要宏偉,但是要從小的開始,同時可以快速的進(jìn)行擴展。Tiny框架的構(gòu)建者認(rèn)為:如果想法不夠宏偉,那么就會局限于細(xì)節(jié);如果一開始就鋪非常大的攤子,將會失去控制;如果不能快速擴展,就無法滿足應(yīng)用需要。
3. Tiny框架的應(yīng)用定位
基于WEB的展現(xiàn)平臺主要包括展現(xiàn)層及控制層,可以讓開發(fā)人員方便快速的實現(xiàn)Web層的開發(fā),同時要避免現(xiàn)有方案的缺點,同時要有自己非常突出的優(yōu)點?;?font face="Times New Roman">SOA的服務(wù)開發(fā)平臺可以方便的開發(fā)平臺無關(guān)的服務(wù),同時有水平擴展,應(yīng)用集群方面要有良好的支持,可以滿足7*24的運維要求。
4. Tiny框架的目標(biāo)定位
Tiny框架的構(gòu)建者認(rèn)為再好的框架也有過時的時候,再優(yōu)秀的架構(gòu)師也有視野盲區(qū),再牛的寫手也無法實現(xiàn)所有的部分。所以Tiny框架的構(gòu)建者認(rèn)為:只有建立一個良好的生態(tài)圈,讓廣大開發(fā)者使用者都在生態(tài)圈在找到自己的位置,才是有生命的模式。
5. 兼容性測試
理論上說支持各種支持JDK1.6以上的32位,64位操作系統(tǒng),但是限于時間及環(huán)境準(zhǔn)備,實際測試過程當(dāng)中沒有全部測試過。
6. 引用的開源框架和開源協(xié)議
框架引用的開源框架有:VelocityVelocity官方網(wǎng)站,Lucene,MavenMaven;擴展引用的開源框架有:JQueryJQuery,HibernateHibernate,iBatisiBatis。
Tiny框架有兩個部分的內(nèi)容,一部分采用開源方式發(fā)布,開源發(fā)布的部分采用GPLv3開源協(xié)議,詳細(xì)參見英文文本,也可以參看GNU通用公共許可協(xié)議獲取中文的一些解釋;另一部分沒有開源,采用商業(yè)授權(quán)方式進(jìn)行發(fā)布。Tiny框框架之所以選擇了GPL協(xié)議,主要出發(fā)點是說:如果你喜歡Tiny框架,那么可以通過Fork的方式貢獻(xiàn)自己的代碼,也可以加入Tiny組織一起來構(gòu)建Tiny框架;也在自己的項目或產(chǎn)品中可以免費使用Tiny框架。但是不允許把Tiny框架整體或其中的一部分作為自己的閉源框架進(jìn)行發(fā)布。這也就意味著,如果你要擴展Tiny框架或者修改Tiny框架為自己的框架,則你自己框架也是需要開源并提供源代碼的。
7. 編碼規(guī)范
Tiny的編碼規(guī)范,如下:采用Eclipse的Ctrl+Shift+F,格式化出來的格式,即基本的縮進(jìn)格式所有類名都采首字母大寫的駝峰規(guī)則所有方法名,變量名都采用首字母小寫的駝峰規(guī)則所有常量名都定義為用“_”連接的全大寫單詞方法的圈復(fù)雜度3個以下為標(biāo)準(zhǔn)值,5-7個為可接受值,8個以上要加備注說明其必要性除了極少數(shù)情況外(數(shù)據(jù)下標(biāo),集合或數(shù)組長度等),所有的常量都應(yīng)該定義為常量除非縮寫是業(yè)界標(biāo)準(zhǔn)說法,否則所有變量名及常量名,都用全單詞拼寫類名全部用名字為主體,前面可以加形容性或限定詞方法名全部用形容性或動詞為主體方法行數(shù),一般在20行以內(nèi),20-40行屬于可接受范圍,40+以上要有備注說明其必要性類名及接口方法必須有備注說明,實現(xiàn)類中的方法可以不加。非接口實現(xiàn)類的公有方法必須有備注說明不允許出現(xiàn)Main方法,除非確實需要從命令行運行異常必須扔出或日志,如果抓住不作處理,需要有明確注釋說明日志記錄必須閉環(huán)(有開始,有結(jié)束)利用sonar進(jìn)行檢測,RCI(規(guī)則遵從指數(shù))達(dá)到90%以上。
歡迎關(guān)注:http://web.j2ee.top。本例涉及的代碼和框架資料,將會在這里分享。歡迎進(jìn)加入QQ群:228977971,讓我們一起成長!