論J-Hi平臺(tái)的特點(diǎn)
最近很多網(wǎng)友問(wèn)我同樣的問(wèn)題,那就是J-Hi與其它的平臺(tái)類產(chǎn)品有什么區(qū)別?它有哪些獨(dú)特的特點(diǎn)。實(shí)際在我看來(lái)J-Hi與目前任何其它平臺(tái)類的產(chǎn)品的出發(fā)點(diǎn)或稱之為初宗都是相同的,那就是想解決如何使開(kāi)發(fā)更快速、更高效,如何降低項(xiàng)目的成本(不只是快速開(kāi)發(fā)所帶來(lái)的成本降低,也包括項(xiàng)目的管理成本)。
總的來(lái)說(shuō),目前市場(chǎng)上的平臺(tái)類產(chǎn)品所采用的核心技術(shù)無(wú)非兩種,一種是模型驅(qū)動(dòng)(后臺(tái)有一個(gè)模型引擎來(lái)負(fù)責(zé)解析與計(jì)算這些業(yè)務(wù)模型從而得到預(yù)期的運(yùn)算結(jié)果);另一種是代碼生成(按照定義的模型通過(guò)生成器生成全部源文件)。從技術(shù)本身來(lái)看,這兩種技術(shù)都不算什么新鮮東西,只是隨著計(jì)算機(jī)運(yùn)算能力的提高,相關(guān)技術(shù)的不斷成熟,使這兩種技術(shù)應(yīng)用于業(yè)務(wù)開(kāi)發(fā)平臺(tái)成為可能,因此單純從技術(shù)先進(jìn)性來(lái)看,那我覺(jué)得都沒(méi)有什么在技術(shù)可以稱道的地方。反之,平臺(tái)它是多種技術(shù)的融合體,尤其是業(yè)務(wù)開(kāi)發(fā)平臺(tái)不只包括技術(shù)本身還會(huì)包含一些通用的業(yè)務(wù)以及一些開(kāi)發(fā)工具。因?yàn)檫@些的差異,就形成了各類平臺(tái)產(chǎn)品的差異性。在此讓我們來(lái)分析一下J-Hi Java快速開(kāi)發(fā)平臺(tái)自身的特點(diǎn)(即與其它平臺(tái)的不同之處):
快速的按需動(dòng)態(tài)搭建
目前平臺(tái)支持的框架有:webwork、struts2、spring、hibernate、ibatis2、ibatis3,對(duì)于這些框架您可以通過(guò)可視化(J-HI Studio,eclipse插件)的方式隨意組合,通過(guò)工程創(chuàng)建向?qū)?,自?dòng)化的按照你所選擇的框架快速的動(dòng)態(tài)搭建起開(kāi)發(fā)工程。我們之所以將J-Hi做成多框架動(dòng)態(tài)搭建,主要是考慮到不同企業(yè)的開(kāi)發(fā)團(tuán)隊(duì)對(duì)技術(shù)的傾向性會(huì)有很大差別,比如對(duì)于ORM有的人就喜歡hibernate,而有的人就覺(jué)得hibernate太強(qiáng)硬,喜歡用半自動(dòng)化的ibatis。J-Hi基于這個(gè)目的為開(kāi)發(fā)者提供了更多的可選擇性。在此要注意對(duì)于平臺(tái)多框架的集成并不象一般意思上的集成(即幾個(gè)框架拼接在一起就可以象appfuse一樣),因?yàn)槠脚_(tái)的集成還要包括很多通用業(yè)務(wù)并且與數(shù)據(jù)庫(kù)表是有關(guān)系的(一般搭建多框架是沒(méi)有業(yè)務(wù)的所有的東西都要由你親自去開(kāi)發(fā),而平臺(tái)會(huì)有很多的業(yè)務(wù)已經(jīng)預(yù)留在平臺(tái)中)。舉個(gè)例子:比如安全管理,這是平臺(tái)的一個(gè)通用業(yè)務(wù)包括角色、權(quán)限等。在切換到不同的框架比如struts或webwork;hibernate或ibatis時(shí),平臺(tái)的底層要自動(dòng)的適應(yīng)這種變化,這是有一定的創(chuàng)新點(diǎn)的J。當(dāng)然我們以后還會(huì)集成更多、更優(yōu)秀的框架在平臺(tái)之中,比如SpringMVC,SpringJDBC等等,在數(shù)據(jù)庫(kù)端我們也會(huì)再多支持一些數(shù)據(jù)庫(kù),當(dāng)然集成數(shù)據(jù)庫(kù)也不是傳統(tǒng)意義上的只是一個(gè)數(shù)據(jù)庫(kù)連接,而是針對(duì)不同的數(shù)據(jù)庫(kù)差異會(huì)做不同的方言,不同的數(shù)據(jù)庫(kù)腳本還要有相應(yīng)的生成模板等等。
因此你會(huì)發(fā)現(xiàn)快速按需動(dòng)態(tài)搭建,并不是傳統(tǒng)意義上的多框架集成那么簡(jiǎn)單,而是對(duì)應(yīng)每一種框架(數(shù)據(jù)庫(kù))平臺(tái)都會(huì)提供一套完整的解決方案??傊嗫蚣芗蓪?duì)于J-Hi來(lái)說(shuō),是牽一發(fā)而動(dòng)全身的事情,變動(dòng)一個(gè)框架,包括每一個(gè)頁(yè)面,每一個(gè)java類,每一個(gè)配置文件都要隨之而動(dòng)態(tài)的變化。因此它是系統(tǒng)級(jí)的工程而非簡(jiǎn)單的多個(gè)框架拼接。
完整而系統(tǒng)的生成方案
代碼生成或生成器這實(shí)際上在十年前就已經(jīng)有的東西,無(wú)論是實(shí)現(xiàn)原理還是具體的工具都不是新鮮事物。J-Hi之所以將代碼生成也算作自己的特色,是因?yàn)樗耐暾耘c系統(tǒng)性。從完整性來(lái)看,J-Hi的生成是一套含蓋從數(shù)據(jù)庫(kù)底層一直到頁(yè)面端全部的解決方案,包括數(shù)據(jù)庫(kù)表;權(quán)限、菜單、多語(yǔ)言等相關(guān)基礎(chǔ)數(shù)據(jù);java類文件;JSP、js文件;相關(guān)配置文件等等,因此保證了生成即可運(yùn)行,從單元體上來(lái)看生成文件是完整的,是可獨(dú)立運(yùn)行的。從系統(tǒng)性來(lái)看,生成的文件是隨著你選擇的框架不同而不同的,生成的基礎(chǔ)是隨著框架與數(shù)據(jù)庫(kù)的差異而隨需變化,系統(tǒng)的解決了生成器的僵硬性,從而靈活的適應(yīng)開(kāi)發(fā)環(huán)境。因此J-Hi的生成方案是系統(tǒng)的,是適應(yīng)不同框架與數(shù)據(jù)庫(kù)的生成方案的。
平臺(tái)到底生成了些什么?
組件化
在軟件世界里組件這個(gè)概念真是千差萬(wàn)別,每個(gè)系統(tǒng)與工具軟件對(duì)組件都有各自不同的定義。尤其在Java世界里更是如此,小的從一個(gè)頁(yè)面元素一直到大的一個(gè)業(yè)務(wù)功能系統(tǒng),在各自的領(lǐng)域都會(huì)給它們定義為組件。按照《計(jì)算機(jī)百科全書》給組件的定義:是軟件系統(tǒng)中具有相對(duì)獨(dú)立功能、接口由契約指定、和語(yǔ)境有明顯依賴關(guān)系、可獨(dú)立部署、可組裝的軟件實(shí)體。由此定義我們來(lái)談一下J-Hi Java快速開(kāi)發(fā)平臺(tái)對(duì)組件的理解與解決方案。
實(shí)際上說(shuō)到底無(wú)非是對(duì)組件顆粒的劃分問(wèn)題,在不同的條件與環(huán)境下組件的作用與功能會(huì)有很大差異,其次在定義組件時(shí)要保證功能的相對(duì)獨(dú)立并且可組裝可部署,由此J-Hi將組件根據(jù)用途與范圍的不同劃分為如下四類組件類型:技術(shù)組件、實(shí)體組件、業(yè)務(wù)組件、系統(tǒng)組件,它們之間的關(guān)系是逐級(jí)遞進(jìn),互為基礎(chǔ)的。

在我們?cè)谏钊胩接懼?,先?lái)簡(jiǎn)單的解釋一下上圖中各種組件類型之間的關(guān)系。比如一個(gè)OA系統(tǒng)我們就可以把這理解為一個(gè)系統(tǒng)組件,而多個(gè)系統(tǒng)組件(倉(cāng)儲(chǔ)系統(tǒng)、人力系統(tǒng)等)可以動(dòng)態(tài)搭建更大的應(yīng)用系統(tǒng)(ERP)。每個(gè)系統(tǒng)組件下會(huì)有多個(gè)業(yè)務(wù)組件,例如在OA系統(tǒng)下會(huì)有報(bào)銷單、會(huì)議管理等多個(gè)業(yè)務(wù)組件。因?yàn)榇蟛糠謽I(yè)務(wù)組件之間一般都是松藕合的,所業(yè)務(wù)組件可以無(wú)縫的遷移到其它的系統(tǒng)組件中,即實(shí)現(xiàn)業(yè)務(wù)組件可復(fù)用性。而在一個(gè)業(yè)務(wù)組件下會(huì)有一個(gè)或多個(gè)實(shí)體組件夠成,我們還以報(bào)銷單業(yè)務(wù)組件為例,在報(bào)銷單最少會(huì)有報(bào)銷單及報(bào)銷單明細(xì)兩個(gè)實(shí)體組件,一個(gè)實(shí)體您可以理解成與數(shù)據(jù)庫(kù)對(duì)應(yīng)的一張表,實(shí)體之間可以繼承、一個(gè)實(shí)體可以有多個(gè)子實(shí)體。但實(shí)體不僅僅是數(shù)據(jù)庫(kù)表,它包括從頁(yè)面到數(shù)據(jù)庫(kù)表之間的全部代碼實(shí)現(xiàn)同時(shí)包括CURD所有操作的功能單元。對(duì)于實(shí)體組件我們會(huì)在后面詳細(xì)討論。***是技術(shù)組件,在J-Hi中技術(shù)組件可以說(shuō)是一個(gè)抽象的概念,一個(gè)技術(shù)組件就是一個(gè)技術(shù)功能單元,它可能是一套生成模版,一個(gè)框架的支持,一套API(比如對(duì)短信、全文檢索的支持等)
實(shí)體組件:J-Hi將一個(gè)實(shí)體組件定義為一個(gè)集合單元,它不僅僅包括數(shù)據(jù)庫(kù)表還包括對(duì)該數(shù)據(jù)庫(kù)表的基礎(chǔ)操作(增、刪、查、改);包括前端的展示面頁(yè);包括該實(shí)體的權(quán)限、菜單、配置信息;還包括它與其它實(shí)體的交互操作。當(dāng)然一個(gè)實(shí)體組件顆粒度還是太小,還不能完整的描述一個(gè)業(yè)務(wù)功能。但實(shí)體組件相對(duì)來(lái)說(shuō)有一定的獨(dú)立性,可以集成一個(gè)集合單元,J-Hi就是以實(shí)體組件為基礎(chǔ)實(shí)現(xiàn)更大粒度的集成,從而實(shí)現(xiàn)對(duì)一個(gè)完整業(yè)務(wù)的描述。

業(yè)務(wù)組件:實(shí)際上一個(gè)業(yè)務(wù)組件J-Hi將它對(duì)應(yīng)于一個(gè)服務(wù),服務(wù)可以認(rèn)為是一個(gè)業(yè)務(wù)功能模塊,用以描述完整的業(yè)務(wù)模式,具體相對(duì)的業(yè)務(wù)獨(dú)立性。在服務(wù)內(nèi)代碼間是高聚集的,因?yàn)橐粋€(gè)服務(wù)就是一套完整的業(yè)務(wù),在設(shè)計(jì)服務(wù)時(shí)應(yīng)盡***限度的降低服務(wù)與服務(wù)之間的藕合度。因?yàn)樵谶@個(gè)樣一個(gè)理論基礎(chǔ)上去設(shè)計(jì),就可以實(shí)現(xiàn)業(yè)務(wù)組件無(wú)縫的在各系統(tǒng)之間的可移植性。因?yàn)榻M件的定義還要可以獨(dú)立的組裝與部署,因此我們開(kāi)發(fā)平臺(tái)的附屬性產(chǎn)品——Hi平臺(tái)產(chǎn)品集成工具,它主要是由發(fā)布器與部署器組成,以更方便的實(shí)現(xiàn)業(yè)務(wù)組件的遷移。


開(kāi)發(fā)發(fā)布器與部署器的目的就是通過(guò)可視化的方式,實(shí)現(xiàn)跨數(shù)據(jù)庫(kù)數(shù)據(jù)與跨應(yīng)用系統(tǒng)的業(yè)務(wù)組件遷移??梢詫I(yè)務(wù)組件看作一個(gè)獨(dú)立的業(yè)務(wù)單元,可以無(wú)縫的集成于任何以J-Hi平臺(tái)開(kāi)發(fā)的項(xiàng)目中去。從而真正達(dá)到隨需組合,動(dòng)態(tài)搭建實(shí)際的業(yè)務(wù)系統(tǒng),真正的實(shí)現(xiàn)業(yè)務(wù)組件的復(fù)用,降低不必要的重復(fù)開(kāi)發(fā)。
系統(tǒng)組件:從業(yè)務(wù)功能上來(lái)看系統(tǒng)組件不過(guò)是多個(gè)業(yè)務(wù)組件的拼接,更大一級(jí)的業(yè)務(wù)封裝。理論上系統(tǒng)組件與系統(tǒng)組件之間應(yīng)滿足絕對(duì)的隔離性,即使是有通信,應(yīng)該也是通過(guò)第三方來(lái)進(jìn)行數(shù)據(jù)交互(常用的解決方式有兩種一種是中間數(shù)據(jù)庫(kù);第二種是webservice)。但如果是基于平臺(tái)開(kāi)發(fā),這種無(wú)謂的工作量可以降低很少,甚至可以不需要第三方的交互技術(shù)。只要保證兩個(gè)系統(tǒng)間的通信接口就要以輕松實(shí)現(xiàn)。系統(tǒng)組件的遷移也可以通過(guò)發(fā)布器與部署器來(lái)實(shí)現(xiàn)。
技術(shù)組件:從技術(shù)角度來(lái)看,J-Hi與其它的技術(shù)組件差別不大。無(wú)非是基于平臺(tái)再開(kāi)發(fā)一些技術(shù)組件,比如對(duì) SpringMVC、SpringJDBC、DB2數(shù)據(jù)庫(kù)等的支持,頁(yè)面端也會(huì)再集成象DWZ或simpleframework,我們也會(huì)再提供更多的頁(yè)面端的生成模版,以此類推,平臺(tái)的技術(shù)組件會(huì)在技術(shù)的不同層面進(jìn)行擴(kuò)展。但與其它的技術(shù)組件不同之處在于,實(shí)現(xiàn)類似于插件一樣的可插拔,隨需織入。
【編輯推薦】