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