Tiny開(kāi)源框架創(chuàng)始人羅果:開(kāi)源初衷是對(duì)思想的驗(yàn)證
原創(chuàng)【51CTO.com獨(dú)家特稿】嘉賓介紹
羅果是Tiny開(kāi)源框架創(chuàng)始人,主要關(guān)注技術(shù)領(lǐng)域?yàn)镴2EE及應(yīng)用開(kāi)發(fā)平臺(tái),涉獵廣泛。他在模塊化、元數(shù)據(jù)、模板引擎、數(shù)據(jù)庫(kù)分區(qū)分表、SOA等領(lǐng)域有較深入實(shí)踐,吃過(guò)N多的虧,上過(guò)N多的當(dāng),當(dāng)然也積累了N多的經(jīng)驗(yàn)。
在業(yè)余時(shí)間,羅果熱心于參與開(kāi)源軟件相關(guān)工作,在進(jìn)行軟件開(kāi)源的同時(shí),也編寫(xiě)了大量的技術(shù)博客,從問(wèn)題、原理、實(shí)踐方面進(jìn)行了深入淺出的講解。
他經(jīng)常掛在嘴邊一句話(huà)是:好的軟件設(shè)計(jì)是“品”出來(lái)的。信奉好的軟件架構(gòu)一定是簡(jiǎn)單的。
下面是羅果先生回答51CTO小編的幾個(gè)問(wèn)題,我們整理出來(lái)以饗讀者。
1.開(kāi)發(fā)TinyFramework的初衷是什么?
我在開(kāi)發(fā)TinyFramework之前,也在公司的體制下主導(dǎo)了開(kāi)發(fā)平臺(tái)的開(kāi)發(fā),但是由于在公司體制下,需要完全按照公司的要求和規(guī)范來(lái)開(kāi)發(fā),實(shí)際上就要顧及各方面的平衡,而這些平衡可能會(huì)對(duì)一個(gè)框架產(chǎn)生嚴(yán)重的傷害。而我期望做一個(gè)各方面比較均衡的開(kāi)發(fā)平臺(tái),于是就從各種小的專(zhuān)題性驗(yàn)證開(kāi)始,比如:流程化編程、模塊化設(shè)計(jì)、數(shù)據(jù)庫(kù)分區(qū)分表等等一一進(jìn)行驗(yàn)證,當(dāng)驗(yàn)證的范圍越來(lái)越大,涵蓋的領(lǐng)域越來(lái)越多的時(shí)候,才真正開(kāi)始決定做一個(gè)開(kāi)源框架。
因此,追本溯源,最初的初衷就是對(duì)自己思想的一些驗(yàn)證。
2.前段時(shí)間TinyFramework剛推出 2.0 版本,新的版本里有哪些新的特性?在一年的開(kāi)發(fā)中,有哪些值得記錄的故事?
TinyFramework的立意是企業(yè)級(jí)的開(kāi)發(fā)平臺(tái),因此在方法論、設(shè)計(jì)理念、開(kāi)發(fā)體系、設(shè)計(jì)原則、生態(tài)圈、模塊化、熱部署、水平擴(kuò)展、元數(shù)據(jù)等非功能性要求方面做了大量的探索和實(shí)踐。
當(dāng)然在功能性需求方面,也有非常多的突破,由于Tiny框架涵蓋的功能太多,因此只拿幾個(gè)有代表性的功能來(lái)簡(jiǎn)單介紹一下:
◆TinyDBRouter(數(shù)據(jù)庫(kù)分區(qū)分表):基于JDBC層實(shí)現(xiàn),可以支持SQL92規(guī)范下的各種數(shù)據(jù)庫(kù)進(jìn)行透明的數(shù)據(jù)庫(kù)分區(qū)、分表讀寫(xiě)分離等水平擴(kuò)展。
◆TinyTemplate(模板引擎):一個(gè)類(lèi) Velocity的模板引擎,但是功能更強(qiáng)大,添加了許多Velocity不支持的特性,運(yùn)行速率大致是Velocity的4倍。
◆TinySqlDSL(數(shù)據(jù)庫(kù)開(kāi)發(fā)框架):基于領(lǐng)域查詢(xún)語(yǔ)言方式的數(shù)據(jù)庫(kù)開(kāi)發(fā)框架,可以在Java中用類(lèi)似于寫(xiě)SQL的方式來(lái)進(jìn)行數(shù)據(jù)庫(kù)編程,比較好的解決了數(shù)據(jù)庫(kù)與Java兩層之間結(jié)合時(shí)的問(wèn)題(要么兩者是分離的如iBatis,要么引入一種全新的語(yǔ)言如Hibernate的HSQL,要么就是在Java中進(jìn)行大量的SQL拼接)。當(dāng)然數(shù)據(jù)庫(kù)的開(kāi)發(fā)方案有許多種解,各種解有各種解的優(yōu)缺點(diǎn),DSL方式也是一種實(shí)現(xiàn)方案,有其自己的優(yōu)缺點(diǎn)。
◆TinyUI(界面引擎):主要解決WEB應(yīng)用開(kāi)發(fā)中的模塊化和JS、CSS及各種靜態(tài)資源管理的問(wèn)題,主要解決靜態(tài)資源Jar包化、CSS 合并打包壓縮、JS合并打包壓縮,UI模塊之間的依賴(lài)關(guān)系等體系性問(wèn)題。
◆TinyStudio(集成開(kāi)發(fā)工具):提供了可視化界面設(shè)計(jì),可視化流程編排、模板引擎編輯器、代碼生成器,服務(wù)編輯器、元數(shù)據(jù)編輯器、數(shù)據(jù)庫(kù)設(shè)計(jì)器。
3.你平常是怎樣維護(hù)TinyFramework項(xiàng)目和社區(qū)的?
在早期,我們還是默默無(wú)聞的,因?yàn)槲覀儾幌朐诳蚣苓€是一個(gè)半成品的時(shí)候就拿出來(lái),直到我們已經(jīng)開(kāi)發(fā)完畢并且在項(xiàng)目組內(nèi)進(jìn)行了充分驗(yàn)證的時(shí)候才真正地在社區(qū)或相關(guān)網(wǎng)站進(jìn)行發(fā)布。我們大致是從以下幾個(gè)角度維護(hù)項(xiàng)目和社區(qū)的:
◆代碼托管在開(kāi)源中國(guó)的git倉(cāng)庫(kù):https://git.oschina.net/tinyframework/tiny。目前有294 watches,453 stars,361 forks。
◆構(gòu)建Tiny文檔WiKi:http://www.tinygroup.org/confluence/display/TF。Tiny文檔總共有900多頁(yè),涵蓋了設(shè)計(jì)、實(shí)現(xiàn)、示例、實(shí)踐等各方面,目前日訪(fǎng)問(wèn)量在1500左右。
◆創(chuàng)建Tiny社區(qū):http://bbs.tinygroup.org。Tiny社區(qū)是新推出的專(zhuān)注入Tiny方面的交流與溝通平臺(tái)。
◆創(chuàng)建Tiny交流QQ群:228977971。QQ群采取比較嚴(yán)格的管理方式,對(duì)技術(shù)純潔性保持良好。目前該群已有用戶(hù)1000多人。
通過(guò)上面的一些與項(xiàng)目相關(guān)的社區(qū)、博客、QQ群等形式,我們與廣大Java框架、Tiny愛(ài)好者進(jìn)行了充分的互動(dòng)與交流。不管是學(xué)習(xí)者、參與者、交流者、使用者,希望大家都有收獲。同時(shí),在這個(gè)過(guò)程中,我們也受益匪淺,對(duì)開(kāi)源項(xiàng)目也有了更深入的理解。
4.TinyFramework有哪些優(yōu)點(diǎn)和特點(diǎn)?有沒(méi)有哪些特殊的或者創(chuàng)新的技術(shù)運(yùn)用?
◆設(shè)計(jì)理念決定了設(shè)計(jì)的目標(biāo)
使用靈活:可以整個(gè)使用它,也可以只用它的一個(gè)或幾個(gè)部分。Tiny構(gòu)建者認(rèn)為,一個(gè)完整的框架可能需要由許多個(gè)部分組成,但是對(duì)于實(shí)際應(yīng)用的用戶(hù)來(lái)說(shuō),它可能只需要其中的一部分功能??蚣芤欢ㄒ羞@種能力,可以由使用者進(jìn)行菜單式使用,避免只要用一點(diǎn)點(diǎn)功能,就要引入許多其他的功能。
學(xué)習(xí)成本低、上手容易:框架的學(xué)習(xí)成本必須非常低,才可以讓使用者更容易上手,避免由于學(xué)習(xí)難度大而導(dǎo)致的學(xué)習(xí)曲線(xiàn)太陡、太長(zhǎng)。
保持核心的穩(wěn)定性:Tiny框架要求在穩(wěn)定、安全要求非常高的應(yīng)用環(huán)境中使用,因此其穩(wěn)定性就是框架構(gòu)建者首要思考的目標(biāo),核心部分只使用經(jīng)過(guò)充分驗(yàn)證及廣泛應(yīng)用的第三方包。
資產(chǎn)的可積累性:只有易于知識(shí)積累,才可以真正做到越用越強(qiáng)。
◆設(shè)計(jì)原則解決目標(biāo)沖突時(shí)的解決策略
約定優(yōu)于配置原則-COC
不要重復(fù)你自己原則-DRY
減法原則 :減法原則是我們自己提出的,意思就是給程序員做減法。
模塊化原則:模塊化對(duì)于軟件開(kāi)發(fā)過(guò)程中的開(kāi)發(fā)、高度、集成、發(fā)布、維護(hù)過(guò)程中所起的作用是節(jié)省可能要花費(fèi)的大成本。因此,我們提出了Business Unit的概念,使得與模塊相關(guān)的所有內(nèi)容可以放在一塊。
自動(dòng)組裝原則:在整個(gè)Tiny框架的構(gòu)建過(guò)程中,都非常注重集成過(guò)程的自動(dòng)組裝,要求做到用戶(hù)使用起來(lái)不用管,由框架自動(dòng)集成。
下級(jí)服從上級(jí)原則:Tiny框架從框架層級(jí)做了限制,使得下級(jí)必須服務(wù)上級(jí)。
單一原則:通過(guò)單一原則進(jìn)行強(qiáng)制性的約束,使得一個(gè)模塊只解決單一模塊應(yīng)該解決的問(wèn)題,從而避免不同的問(wèn)題放在一起解決所導(dǎo)致的混合問(wèn)題,同時(shí)也避免了不恰當(dāng)?shù)囊蕾?lài)及模板引用。
集中配置原則:我們對(duì)Tiny框架配置做了大量的工作,一個(gè)是COC方式,如果您不進(jìn)行配置,可以采用系統(tǒng)默認(rèn)的值;一個(gè)是集中原則,把需要人工配置的內(nèi)容集中起來(lái)做統(tǒng)一配置;一個(gè)是對(duì)不需要人工干預(yù)的配置,那就集成在Jar包中,作為發(fā)布者發(fā)布項(xiàng)的一部分。
#p#
◆一些創(chuàng)新性的技術(shù)應(yīng)用
SOA:Tiny的服務(wù)是一次開(kāi)發(fā)到處使用,也就是一旦完成了服務(wù)的開(kāi)發(fā),你可以用RMI,WebService,Json,Xml等等,或者其他你想不到的方式進(jìn)行服務(wù)調(diào)用。
服務(wù)水平擴(kuò)展能力:在遵守Tiny開(kāi)發(fā)規(guī)范的前提下,可以方便的進(jìn)行接入和服務(wù)層的水平擴(kuò)展。也就是說(shuō)當(dāng)你的處理能力不足的時(shí)候,只要加一臺(tái)機(jī)器就可以增加處理能力,而不必對(duì)現(xiàn)有運(yùn)行的環(huán)境進(jìn)行任何變化。
模塊化技術(shù):Tiny模塊化的設(shè)計(jì)思想是全部都可以進(jìn)行模塊化,也就是所有的文件都可以放在Jar包中,甚至連Jsp也可以放入Jar包。通過(guò)模塊化技術(shù),我們可以方便的進(jìn)行模塊分隔與復(fù)用。
自組裝技術(shù):Tiny的自組裝設(shè)計(jì)思想是所有的模塊都可以做到加入即可用,去除就消失。也就是說(shuō),如果你用別人的一個(gè)組件,你只要通過(guò)Maven依賴(lài)它即可以;如果你不想用了,取消Maven依賴(lài)即可。這樣就會(huì)大大減少集成相關(guān)的工作量。
熱部署技術(shù):關(guān)于熱部署的實(shí)踐有許多種,比如OSGI,但是不管哪一種,都有一定的強(qiáng)依賴(lài)性,或者說(shuō)是侵入性。Tiny的熱部署實(shí)現(xiàn)機(jī)制則簡(jiǎn)單的多,只要按照正常的方式來(lái)開(kāi)發(fā)Jar包,并且配置一個(gè)Bundle聲明文件即可。實(shí)際應(yīng)用當(dāng)中,既可以按照Bundle機(jī)制運(yùn)行,也可以按照普通Jar包來(lái)運(yùn)行。
UIML技術(shù):UIML也就是統(tǒng)一界面描述語(yǔ)言的意思。通過(guò)這一特性,再加上配套的可視化界面設(shè)計(jì)工具,就可以實(shí)現(xiàn)一次開(kāi)發(fā)到處使用的界面開(kāi)發(fā)目標(biāo)。
AOP緩沖框架:可以有效剝離緩沖與業(yè)務(wù)代碼,可以透明的切換緩沖方案,大幅降低緩沖相關(guān)代碼編寫(xiě)的開(kāi)發(fā)與重構(gòu)成本。
文檔生成框架:按照Tiny開(kāi)發(fā)規(guī)范進(jìn)行開(kāi)發(fā),許多的文檔都可以通過(guò)工具自動(dòng)化生成。文檔與代碼不一致不再是問(wèn)題,同時(shí)還可以節(jié)省大量的文檔編寫(xiě)時(shí)間。
5.目前TinyFramework使用情況如何?成功的應(yīng)用案例可以和我們分享下嗎?
TinyFramework從初版出來(lái),目前主要在公司內(nèi)部進(jìn)行推廣和應(yīng)用。同時(shí),已經(jīng)有許多企業(yè)級(jí)和互聯(lián)網(wǎng)級(jí)產(chǎn)品基于Tiny開(kāi)發(fā),并在幾十家客戶(hù)中使用。產(chǎn)品開(kāi)源以來(lái),許多團(tuán)隊(duì)或者企業(yè)在應(yīng)用過(guò)程中提出了許多好的意見(jiàn)、建議和需求,有的甚至直接幫我們提交了Pull Request。一年以來(lái),Tiny的社區(qū)環(huán)境越來(lái)越完善,期望在2015年,TinyFramework能夠在外部用戶(hù)數(shù)上有一個(gè)較大的提升。
6.能否稍微介紹一下你們的開(kāi)發(fā)團(tuán)隊(duì)?你們平時(shí)都是怎樣進(jìn)行溝通協(xié)作的?
TinyFramework的開(kāi)發(fā)團(tuán)隊(duì)由穩(wěn)定的團(tuán)隊(duì)成員組成。我也嘗試過(guò)招募一些愿意參與的愛(ài)好者,實(shí)際執(zhí)行效果不太好,當(dāng)然原因也是各方面的,我也非常理解沒(méi)有堅(jiān)持下來(lái)的參與者。
團(tuán)隊(duì)成員的溝通方式主要有如下幾種:
◆團(tuán)隊(duì)建設(shè):上一年當(dāng)中,大家一塊吃飯討論有20多次。吃飯的理由很多,比如家里添丁、技術(shù)晉級(jí)、產(chǎn)品獲獎(jiǎng)等,當(dāng)然最多的聚餐理由是由于出現(xiàn)嚴(yán)重Bug,或者有嚴(yán)重的設(shè)計(jì)缺陷、提交了影響開(kāi)發(fā)的代碼等技術(shù)相關(guān)的理由。大家邊吃邊聊又提升了技術(shù)能力,同時(shí)也讓大家認(rèn)識(shí)到這種類(lèi)型的錯(cuò)誤根由,保障下次不再出現(xiàn)類(lèi)似問(wèn)題。
◆GIT中的Issues:團(tuán)隊(duì)有句口頭禪,嘴巴講的不算。不管是需求還是Bug,都要錄入到Issues當(dāng)中,由各管理員統(tǒng)一進(jìn)行協(xié)調(diào)管理。提出問(wèn)題、批注問(wèn)題、解決問(wèn)題、跟蹤問(wèn)題、關(guān)閉問(wèn)題,都要在Issues當(dāng)中進(jìn)行管理。
不論是線(xiàn)上還是線(xiàn)下的交流,對(duì)于我們的團(tuán)隊(duì)協(xié)作與和諧發(fā)展都起了非常大的作用,互為補(bǔ)充。
7.你能否談?wù)勀銓?duì)開(kāi)源的理解以及國(guó)內(nèi)開(kāi)源技術(shù)和產(chǎn)品的看法?
這個(gè)問(wèn)題有點(diǎn)大,就拿我以前寫(xiě)的一篇博文中的內(nèi)容來(lái)回答我對(duì)開(kāi)源的理解。
關(guān)于收入的問(wèn)題,如果期望開(kāi)源能夠快速給自己帶來(lái)收入,絕大多數(shù)可能會(huì)失望。一般來(lái)說(shuō),一個(gè)開(kāi)源產(chǎn)品,從開(kāi)始,到發(fā)展,到能盈利,***實(shí)現(xiàn)營(yíng)收平衡,這是一個(gè)漫長(zhǎng)及艱難的過(guò)程。
那開(kāi)源不關(guān)心收入,為什么還要開(kāi)源呢?我想可能有如下可能:
◆獲取精神上的滿(mǎn)足
比如,你做了一個(gè)好東西,但是前期賣(mài)不了錢(qián),放在自己這里,沒(méi)有太多成就感。如果拿出來(lái)開(kāi)源,讓大家可以使用,開(kāi)發(fā)者會(huì)獲得一些成就感。
◆獲得社會(huì)的認(rèn)可
通過(guò)開(kāi)源,獲得相當(dāng)?shù)纳鐣?huì)認(rèn)可度,獲得與別人合作的機(jī)會(huì),更可能贏得更好的發(fā)展或工作機(jī)會(huì)也說(shuō)不定。
◆收集需求
一個(gè)人在那里做,總是有這樣那樣的局限。即使你是超級(jí)牛人,通過(guò)給別人免費(fèi)使用,別人給你提出各種意見(jiàn)和建議,可以幫你快速豐富和完善產(chǎn)品。
◆用戶(hù)測(cè)試
有時(shí)候,你做了個(gè)東東,自己也不知道到底好不好,現(xiàn)在有許多用戶(hù)來(lái)使用,實(shí)際上在幫你做測(cè)試。
◆獲取用戶(hù)群
有時(shí)候,一個(gè)產(chǎn)品放在那里沒(méi)有什么價(jià)值,但是隨著用戶(hù)群越來(lái)越大,可能就有盈利的潛質(zhì)了。同時(shí)也是對(duì)潛在用戶(hù)的培育,免費(fèi)使用的人多了,可能就有愿意付費(fèi)獲得更好的服務(wù)與產(chǎn)品或者定制開(kāi)發(fā)的人了。
◆一種市場(chǎng)營(yíng)銷(xiāo)手段
本來(lái)產(chǎn)品本身做的不錯(cuò),通過(guò)開(kāi)源,獲得市場(chǎng)認(rèn)可,提高知名度,為后續(xù)推廣奠定基礎(chǔ);同時(shí)讓人們看到內(nèi)部的實(shí)現(xiàn),從黑盒變成白盒,讓人們放心的選擇。
當(dāng)然也可能是其中的幾個(gè)或者全部??傊?,開(kāi)源是一個(gè)艱辛的選擇,需要長(zhǎng)久的堅(jiān)守,需要不急不燥的一份態(tài)度。
所以,開(kāi)源是一種修行,你在這個(gè)階段中,可能是沒(méi)有成果的凡人,也可能是小有成就的佛子,更有可能是大有成就的尊者,甚至是至真至高的佛。
接下來(lái)回答國(guó)內(nèi)開(kāi)源技術(shù)和產(chǎn)品的看法:
實(shí)際上,開(kāi)源項(xiàng)目的發(fā)展也是符合螺旋式的軌跡,整體來(lái)看,國(guó)內(nèi)對(duì)開(kāi)源的認(rèn)識(shí)也在由拿來(lái)免費(fèi)用的初級(jí)理解向更高級(jí)別的層次發(fā)展。從整體來(lái)看,國(guó)人開(kāi)源的技術(shù)和產(chǎn)品相對(duì)還處在一個(gè)初級(jí)階段,比如:僅僅是把代碼開(kāi)放出來(lái),沒(méi)有后續(xù)的社區(qū)建設(shè),也沒(méi)有形成生態(tài)圈等各種局限。但是由于國(guó)內(nèi)的開(kāi)源產(chǎn)品基數(shù)大,我們可以看到越來(lái)越多的優(yōu)秀開(kāi)源者和開(kāi)源產(chǎn)品涌現(xiàn)出來(lái),這也符合量變引起質(zhì)變的客觀規(guī)律。Tiny框架與這些優(yōu)秀開(kāi)源產(chǎn)品相比,還比較稚嫩,還有非常大的差距,不過(guò)我們相信,只要能切實(shí)踐行我們團(tuán)隊(duì)的格言“Think big, start small, scale fast!”,我們就一定會(huì)成為優(yōu)秀的開(kāi)源產(chǎn)品之一。
歡迎大家多關(guān)注我們的Tiny社區(qū):http://bbs.tinygroup.org。有關(guān)Tiny的話(huà)題,歡迎加入QQ群:228977971。