來(lái)源:北大青鳥(niǎo)飛迅校區(qū)|發(fā)布時(shí)間:2013-04-29 08:36:28
我在我們應(yīng)該怎樣看待框架 中,實(shí)現(xiàn)了一個(gè)JDBC版的Base類,和一個(gè)Hibernate版的Base類,取模仿RoR的ActiveRecord,這樣我們編程的時(shí)候,只需要實(shí)現(xiàn)一個(gè)Base的子類,就可以完成CRUD了。
我的畢設(shè)題目是與Rest ,更準(zhǔn)確說(shuō)是與ROA有關(guān)的,另外就是在看Spring MVC對(duì)于慣例優(yōu)先 (Convention over Configuration,CoC)原則的實(shí)現(xiàn)。
Web架構(gòu)的四個(gè)元素
無(wú)論是Rails還是Spring MVC都是MVC實(shí)現(xiàn),因此我的研究也肯定是基于MVC模式的。那么分別來(lái)關(guān)注M,V和C,另外就是將url和C進(jìn)行映射的Router(或者說(shuō)是Struts里的映射文件)。
首先是M,我不想自己編M,那就自動(dòng)生成,怎么才能自動(dòng)生成呢,根據(jù)數(shù)據(jù)庫(kù)自動(dòng)生成,而且我生成要是一個(gè)ActiveRecord模式的類。所以不是像過(guò)去弄個(gè)HashMap就能混過(guò)去了。之后就是看了ASM3.1和ClassLoader的知識(shí),發(fā)現(xiàn)這是可以實(shí)現(xiàn)的。如下:
先整個(gè)測(cè)試:
@Test publicvoidgerneratorClass(){ try{ Mapfields=newHashMap();fields.put("id",1l);fields.put("name","wanxing");EntityGernerator.generateEntity("Student",fields);EntityGernerator.invoke("add");}catch(Exceptione){ //TODOAuto-generatedcatchblock e.printStackTrace();} }public void gerneratorClass() { try { Map fields=new HashMap();fields.put("id", 1l);fields.put("name", "wanxing");EntityGernerator.generateEntity("Student",fields );EntityGernerator.invoke("add");} catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace();}這塊的實(shí)現(xiàn)我想了一下,EntityGernerator的generateEntity方法到底只是創(chuàng)建一個(gè)class還是連同實(shí)例化對(duì)象,而其還有invoke方法,這看上去不太對(duì),嗯,它應(yīng)該是只生成class就結(jié)束使命了。不過(guò)以后再迭代吧。
實(shí)現(xiàn)的代碼很簡(jiǎn)單,就是利用了ASM3.1,就搞定了。有兩點(diǎn)需要聲明:
1、可以按需要設(shè)定生成類的父類
2、只能創(chuàng)建類屬性,不能創(chuàng)建方法,因?yàn)榉椒ǖ膶?shí)現(xiàn)太復(fù)雜,用JVM指令寫(xiě)會(huì)死人,不如轉(zhuǎn)向動(dòng)態(tài)語(yǔ)言了,而且它繼承了有用的父類,就已經(jīng)完成了自己的使命了。
V和C都可以用通用的,就像用通用DAO一樣。關(guān)于V有個(gè)特別之處,那就是FrontController,它來(lái)調(diào)配各個(gè)Controller,依照URI和Controller的Mapping,這符合Roy Fielding博士對(duì)于資源的定義:資源是 一種概念上的映射 ——服務(wù)器接收到標(biāo)識(shí)符(標(biāo)識(shí)這個(gè)映射),將它應(yīng)用于當(dāng)前的映射實(shí)現(xiàn)(mapping implementation,通常是與特定集合相關(guān)的樹(shù)的深度遍歷和/或哈希表的組合)上,以發(fā)現(xiàn)當(dāng)前負(fù)責(zé)處理該資源的處理器實(shí)現(xiàn) ,然后處理器實(shí)現(xiàn)基于請(qǐng)求的內(nèi)容選擇適當(dāng)?shù)膭?dòng)作+響應(yīng) .在RoR里這叫做Router.另外V中可以根據(jù)HTTP請(qǐng)求返回適當(dāng)?shù)腜resentation.
REST與CoC
全程面授,不高薪都難
申請(qǐng)成功后,我們將在24小時(shí)內(nèi)與您聯(lián)系
招生熱線: 4008-0731-86 / 0731-82186801
學(xué)校地址: 長(zhǎng)沙市天心區(qū)團(tuán)結(jié)路6號(hào)
Copyright © 2006 | 湖南大計(jì)信息科技有限公司 版權(quán)所有
湘ICP備14017520號(hào)-3