2007年3月21日
#
《在DreamWeave中通過(guò)xml生成xsl》
目標(biāo):
=======================
在DreamWeave中通過(guò)xml生成xsl
準(zhǔn)備:
=======================
一個(gè)xml文件和DreamWeave 8
步驟:
=======================
看視頻啦
注意
操作完成后預(yù)覽時(shí)生成一個(gè)臨時(shí)的html文件,如果何想打開(kāi)xml的時(shí)候自動(dòng)加載xsl
需要在xml的第一行下面加上
<?xml:stylesheet type="text/xsl" href="xxxxxxxx.xsl"
?>
文章來(lái)源:
http://blog.sina.com.cn/u/4a5ca024010006qg
一個(gè)簡(jiǎn)單的方法異步調(diào)用管理器,有如下幾個(gè)部分組成
?
1,異步調(diào)用管理器接口 AsyncManagerIF
2,異步調(diào)用管理器實(shí)現(xiàn) AsyncManagerImpl
3,異步調(diào)用異常類(lèi)???
AsyncCallException
?
4,回調(diào)接口 CallbackIF
?
5,測(cè)試用類(lèi)
?? SimpleTask
用來(lái)計(jì)算一個(gè)字符串重復(fù)n次(用最慢的方法)
???Demo??????
用來(lái)啟動(dòng)異步調(diào)用
?
已知Bug
1,如果需要異步調(diào)用方法參數(shù)為null,會(huì)發(fā)生NullPointerException
2,如果需要異步調(diào)用方法參數(shù)為基本型,不能自動(dòng)識(shí)別,必須改為其包裝類(lèi)(比如用Integer代替int)
3,異常處理比較粗糙
?
?
文章來(lái)源:
http://blog.sina.com.cn/u/4a5ca024010006qh
倡議書(shū)

?
???
大家好,
?
???
為了營(yíng)造積極向上的學(xué)習(xí)氣氛,互幫互助共同提高的良好環(huán)境,打造和諧青鳥(niǎo),和諧兆隆,特與google合作推出accp4note開(kāi)源項(xiàng)目,旨在收集各位學(xué)員的學(xué)習(xí)筆記、網(wǎng)上搜集的相關(guān)資料,為今后全面的復(fù)習(xí)、學(xué)習(xí)創(chuàng)造便利的條件。
?
???

?呵呵,廢了半天話(huà),實(shí)際是我在google上申請(qǐng)了一個(gè)項(xiàng)目空間,希望大家能把平時(shí)學(xué)習(xí)的筆記和心得體會(huì)按照章節(jié)順序放上去,積沙成塔,大家在這個(gè)空間內(nèi)取長(zhǎng)補(bǔ)短,共同提高。順便可以學(xué)習(xí)一下最近很熱的版本控制軟件SVN的用法。
?
???
廢話(huà)少說(shuō),有興趣的同學(xué)按照下列步驟加入到這個(gè)項(xiàng)目中來(lái)
????(上次說(shuō)的步驟不正確,重新修正)
????1,確認(rèn)你是gmail用戶(hù)
?????????
如果你不是,把你的email地址留下,我給你發(fā)送一份gmail的注冊(cè)邀請(qǐng)
?
?
???
2,下載SVN客戶(hù)端
???
下載里面的Application,如果你用的是64bit系統(tǒng),下載Application
x64。里面有中文語(yǔ)言包,也可以下載,但是不建議。

???
安裝后系統(tǒng)需要重新啟動(dòng),然后當(dāng)你在資源管理器中點(diǎn)右鍵的時(shí)候會(huì)看到一系列的海龜,呵呵。
?
????
3,對(duì)項(xiàng)目進(jìn)行checkout
?
????
先登錄,然后點(diǎn)擊頁(yè)面中間的超鏈“When prompted, enter your generated
googlecode.com password.”,google會(huì)為你生成你一個(gè)密碼
?
?
???
在資源管理器中新建一個(gè)文件夾,點(diǎn)右鍵,選擇【SVN
Checkout...】,地址輸入“https://accp4note.googlecode.com/svn/trunk/”,接下來(lái)會(huì)問(wèn)你用戶(hù)名和密碼。用戶(hù)名就是你在google注冊(cè)的名字,密碼為剛才生成的
?
???
是不是看到下載了一堆東西?恭喜你,已經(jīng)加入到本項(xiàng)目了!!!
?
???
4,對(duì)修改的內(nèi)容進(jìn)行提交
???
如果你修改了已經(jīng)存在的文件,在文件上點(diǎn)右鍵,選擇【SVN
Commit...】就可以了。
?
???
如果你創(chuàng)建了新的文件,在文件上點(diǎn)右鍵,選擇【TortoiseSVN】-【Add...】就可以了。
??
??對(duì)目錄也可以進(jìn)行同樣的操作。
?
?
?? 5,下載最新版本
???
每一小時(shí)項(xiàng)目都有可能更新,在目錄上點(diǎn)右鍵,選擇【SVN
Update...】可以進(jìn)行智能的更新
?
??
請(qǐng)欲加入本項(xiàng)目的學(xué)員回帖留名,謝謝 
文章來(lái)源:
http://blog.sina.com.cn/u/4a5ca024010006s6
???
午睡卻睡不著,于是想了一道智力題:切帶魚(yú)。
?
????有一條很長(zhǎng)的帶魚(yú),如果一刀切下去,肯定得到2段;兩刀切下去,可能是3段或者4段;三刀下去呢,可能是4,5,6,7,8段,一共5種可能(不考慮魚(yú)塊的大小,只考慮數(shù)量)。
???
???
問(wèn),如果切n刀,有多少種可能。
?
???
第一個(gè)答對(duì)者有獎(jiǎng)勵(lì)。

????
文章來(lái)源:
http://blog.sina.com.cn/u/4a5ca024010006ti
???
已經(jīng)困擾了我一個(gè)月的問(wèn)題在google和Borland論壇的幫助下終于解決了。
?
???
僅當(dāng)JBuilder
2006運(yùn)行在64位系統(tǒng),且物理內(nèi)存大于等于2G時(shí)才會(huì)出現(xiàn)這樣的bug,狂暈,都讓我趕上了。。。
?
????國(guó)內(nèi)論壇上還沒(méi)有看到相關(guān)的問(wèn)題,說(shuō)明現(xiàn)在國(guó)內(nèi)用64位系統(tǒng)+2G內(nèi)存的人還不多,而這個(gè)帖子是去年4月發(fā)布在Borland論壇上的,中國(guó)和外國(guó)的差距還是很明顯啊

。
文章來(lái)源:
http://blog.sina.com.cn/u/4a5ca024010006to
???
昨天在一個(gè)班嘗試使用軟件在機(jī)房進(jìn)行內(nèi)測(cè),節(jié)約紙張,加速批改速度,可惜很多學(xué)生把精力用在了如何找軟件的漏洞進(jìn)行作弊上。
?
???
之前也知道在交卷這個(gè)環(huán)節(jié)上,每個(gè)人生成一個(gè)xml文件然后放在中心服務(wù)器上是很危險(xiǎn)的,但還是幻想大家會(huì)自覺(jué)不去看別人的,結(jié)果嘛…………
?
???
其實(shí)也可以理解,記得原來(lái)在日資公司每天中午要求寫(xiě)日語(yǔ)作文,然后傳到服務(wù)器上,我每次也是去別人的目錄拷貝一個(gè),然后修改之

。不過(guò)性質(zhì)不一樣啊,咱是在糊弄小日本,而內(nèi)測(cè)作弊無(wú)疑是在糊弄自己。于是逼著對(duì)答卷進(jìn)行了加密。
?
???
jdk1.4之后就自帶了一些加密算法,可逆的,不可逆的,對(duì)稱(chēng)的,非對(duì)稱(chēng)的等等,我用的是經(jīng)典的
DES算法,當(dāng)然,有了sun的API,不用自己去實(shí)現(xiàn)這個(gè)算法。
?
???
DES算法需要這么三個(gè)參數(shù):密鑰,模型(加密或解密),內(nèi)容
?
???
以下是通過(guò)一個(gè)字符串產(chǎn)生密鑰的代碼:
?
?public SecretKey makeSecretKey(String s)
{
???DESKeySpec
desKey = new DESKeySpec(s.getBytes());
???SecretKeyFactory
factory = SecretKeyFactory.getInstance("DES");
???SecretKey
secretKey = factory.generateSecret(desKey);
???return
secretKey;
?}
?
???
我采用學(xué)員的名字(也就是文件名)作為密鑰,杜絕了拷貝復(fù)制的可能
???
接下來(lái)是加密和解密的代碼(代碼只有一字之差):
?public static byte[] encrypt(SecretKey
secretKey, byte[] source) {
???Cipher cipher
= Cipher.getInstance("DES");
???cipher.init(Cipher.ENCRYPT_MODE,secretKey);
???byte target[]
= cipher.doFinal(source);
???return
target;
?}
?public static byte[] decrypt(SecretKey secretKey,
byte[] source) {
???Cipher cipher
= Cipher.getInstance("DES");
???cipher.init(Cipher.DECRYPT_MODE,secretKey);
???byte target[]
= cipher.doFinal(source);
???return
target;
?}
??
至此一個(gè)簡(jiǎn)單的加密、解密就做完了,查了一下資料,現(xiàn)在要破解DES(暴力破解)大概需要1臺(tái)20萬(wàn)美元的服務(wù)器運(yùn)行1小時(shí),應(yīng)該問(wèn)題不大了。當(dāng)然,還有一些人對(duì)DES的56位加密強(qiáng)度不滿(mǎn)意,采用三次DES的方法,那就更保險(xiǎn)了

。
文章來(lái)源:
http://blog.sina.com.cn/u/4a5ca024010006tp
??
Swing中如何讓窗體全屏,總在最前面,沒(méi)有邊框和控制欄,并且不能切換出去,也不能最小化或者移動(dòng)……
???
什么時(shí)候需要這樣BT的窗體呢?就是在做內(nèi)測(cè)軟件的時(shí)候,發(fā)現(xiàn)不得不如此,寫(xiě)一個(gè)類(lèi),繼承自JFrame,然后在構(gòu)造函數(shù)中寫(xiě)如下的代碼:
???
this.setExtendedState(JFrame.MAXIMIZED_BOTH);?//最大化
???
this.setAlwaysOnTop(true);????//總在最前面
???
this.setResizable(false);????//不能改變大小
???
this.setUndecorated(true);????//不要邊框
???
接下來(lái)是事件部分,需要關(guān)心的事件是windowLostFocus和windowIconified(最小化)
??? public
void this_windowLostFocus(WindowEvent e) {
???????
this.requestFocus();
???????
this.setLocation(0,0);
??? }
??? public
void this_windowIconified(WindowEvent e) {
???????
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
??? }
???
ok,一個(gè)超級(jí)無(wú)敵的關(guān)不掉,移不走,擋不住的窗體就制作完畢了 
???
文章來(lái)源:
http://blog.sina.com.cn/u/4a5ca024010006wb
??
用SVN來(lái)同步文件夾可以說(shuō)是牛刀小用了,但這是我目前想到的簡(jiǎn)單的做法了。(不想再專(zhuān)門(mén)安裝一個(gè)同步軟件)
?
??
我經(jīng)常需要保持PC上的一個(gè)文檔和U盤(pán)上的一個(gè)文檔內(nèi)容一致,于是,用SVN在硬盤(pán)上建立了一個(gè)資料庫(kù)(建一個(gè)文件夾,在上面點(diǎn)右鍵,選擇create
repository here).
?
???
然后在要同步的文件夾上選擇Import,將內(nèi)容上傳到資料庫(kù)中,然后將文件夾內(nèi)的東西刪光,再選擇Checkout取出來(lái)
?
???
最后在U盤(pán)上也選擇Checkout取出來(lái),以后就可以按照普通的SVN用法來(lái)保證兩處文件夾的內(nèi)容同步了,并且還可以備份,呵呵。
?
???
缺點(diǎn)么,就是浪費(fèi)了點(diǎn)硬盤(pán)空間,并且海龜SVN客戶(hù)端寫(xiě)文件的速度實(shí)在不敢恭維。
文章來(lái)源:
http://blog.sina.com.cn/u/4a5ca024010006wf
今天和if同學(xué)的一段談話(huà)之后,突然想起了汪峰的這首《美麗世界的孤兒》
世界是美麗的,至少外觀(guān)上如此;可人生常常是挫折的,令人喪氣的,甚至有時(shí)會(huì)覺(jué)得成長(zhǎng)就是一個(gè)慢慢喪失激情的過(guò)程。
但是別哭,親愛(ài)的人,我們要堅(jiān)強(qiáng),我們要微笑。因?yàn)闊o(wú)論我們?cè)鯓樱覀冇肋h(yuǎn)是這美麗世界的孤兒
別哭我親愛(ài)的人
我想我們會(huì)一起死去
別哭夏日的玫瑰
一切已經(jīng)過(guò)去
你看車(chē)輛穿梭
遠(yuǎn)處霓虹閃爍
這多象我們的夢(mèng)
來(lái)吧我親愛(ài)的人
今夜我們?cè)谝黄鹛?br>
來(lái)吧孤獨(dú)的野花一切都會(huì)消失
你聽(tīng)窗外的夜鶯路上歡笑的人群
這多象我們的夢(mèng)
哦別哭 ?親愛(ài)的人
我們要堅(jiān)強(qiáng) ?我們要微笑
因?yàn)闊o(wú)論我們?cè)鯓?br>
我們永遠(yuǎn)是這美麗世界的孤兒
有時(shí)我感覺(jué)失落感覺(jué)自己象一顆草
有時(shí)我陷入空虛可我不知道為什么
時(shí)光流走了而我依然在這兒
我已掉進(jìn)深深的旋渦
寶貝看看遠(yuǎn)處月亮從曠野上升起
求你再抱緊我
我感覺(jué)冷我感覺(jué)疼
你看車(chē)輛穿梭就像在尋找什么
他們就象我們的命運(yùn)
哦別哭? 親愛(ài)的人
我們要堅(jiān)強(qiáng)? 我們要微笑
因?yàn)闊o(wú)論我們?cè)鯓?br>
我們永遠(yuǎn)是這美麗世界的孤兒
?
文章來(lái)源:
http://blog.sina.com.cn/u/4a5ca02401000704
從上周六開(kāi)始一直發(fā)燒,現(xiàn)在也沒(méi)有完全好,請(qǐng)了幾天的假。難得清閑,可惜腦子暈暈沉沉。
?
快放寒假吧。

文章來(lái)源:
http://blog.sina.com.cn/u/4a5ca0240100071c
???
這兩天看了亞冬會(huì)的雙人滑,申雪、趙宏博再次讓人感受啊。
?
???
第一次記住這兩個(gè)人大概是7年前,當(dāng)時(shí)用vb做了一個(gè)程序,就用他們兩個(gè)人的照片做的閃屏(Splash)
?
????
他們的作品中我最喜歡應(yīng)該算是《梁祝》,雖然中國(guó)選手之前共同的缺點(diǎn)就是表演不國(guó)際化,但是我相信《梁祝》中表現(xiàn)出來(lái)的中國(guó)式藝術(shù)可以打動(dòng)每一個(gè)外國(guó)人。
?????后來(lái)他們的表演就越來(lái)越成熟(國(guó)際化)了,大概跟于濱教練的水平提升有關(guān)系,到了這次的《沉思》,編排十分的出色,表演也深邃而不沉悶,又有很多小細(xì)節(jié)值得回味(經(jīng)典的勾腳創(chuàng)意)
?????隨便提一下,龐清佟健的《歌劇魅影》也十分不錯(cuò),就是音樂(lè)前半部分不太好,太嘈雜。
????希望他們能堅(jiān)持到08年,呵呵

文章來(lái)源:
http://blog.sina.com.cn/u/4a5ca0240100072p
???
想趁寒假學(xué)學(xué)英語(yǔ),下午去了一家英語(yǔ)培訓(xùn)機(jī)構(gòu),先是給了我兩套題做,一看,都是初中、高中的題,忘得差不多了,不過(guò)應(yīng)該算是及格了。然后和兩個(gè)老外來(lái)口試,平生第一直面國(guó)際友人,還得用英語(yǔ)說(shuō),稍微緊張了點(diǎn)。
???
(突然想到以前在日企干過(guò),也不是第一次了,不過(guò)那個(gè)時(shí)候不需要說(shuō)日語(yǔ),有翻譯啊)
?
???
兩個(gè)人說(shuō)的內(nèi)容我倒是都能聽(tīng)懂,(除了春節(jié)和rainning這兩個(gè)詞當(dāng)時(shí)沒(méi)有反應(yīng)過(guò)來(lái)),但輪到我用英語(yǔ)回答的時(shí)候就比較糟糕了,只能把一堆單詞胡亂拼湊起來(lái),莫說(shuō)語(yǔ)法了,發(fā)音對(duì)不對(duì)也不可知,奇怪的是兩個(gè)老外倒是一副聽(tīng)懂了的表情。
?
??
?后來(lái)我的被他們定位為L(zhǎng)evel
5(一共20級(jí)),主要問(wèn)題是詞匯量有限,對(duì)英語(yǔ)時(shí)態(tài)運(yùn)用基本上都是錯(cuò)誤的(現(xiàn)在回想起來(lái)口試時(shí)候問(wèn)的問(wèn)題很有意思:你今天早上干什么了,昨天晚上干什么了,上個(gè)周末干什么了,明年春節(jié)準(zhǔn)備干什么,當(dāng)時(shí)覺(jué)得怎么問(wèn)這么無(wú)聊的問(wèn)題啊,原來(lái)是在考時(shí)態(tài))
?
???
最后補(bǔ)充一點(diǎn),對(duì)他們的咨詢(xún)?nèi)藛T不太滿(mǎn)意,一點(diǎn)不熱情,基本上是問(wèn)什么答什么,跟公交車(chē)上售票員差不多,郁悶,看看咱們的咨詢(xún)師,那叫一個(gè)專(zhuān)業(yè)……
文章來(lái)源:
http://blog.sina.com.cn/u/4a5ca0240100074e
?
?
去年下半年買(mǎi)的書(shū)不是很多,不過(guò)還是有一些值得推薦:
?
《Head First
EJB(影印版)》:又是O'Reilly出版的,雖然講的是EJB2.0,但是不會(huì)讓你有過(guò)時(shí)的感覺(jué),Head
First系列的書(shū)一向是幽默、輕松。當(dāng)然,本書(shū)所講的內(nèi)容決定了讀這本書(shū)還是有一定難度的,另一缺點(diǎn)就是本書(shū)有點(diǎn)過(guò)于關(guān)注Sun公司的認(rèn)證考試了。而這個(gè)認(rèn)證起碼在國(guó)內(nèi)還不算很有用。
?
《核心Java(影印版)》:寫(xiě)的不錯(cuò),介紹了很多java中基礎(chǔ)(雖然基礎(chǔ),但是并不簡(jiǎn)單)而又重要的東西。建議學(xué)習(xí)Java
1年以上的朋友閱讀
?
《UML精粹(影印版)》:抱著對(duì)Martin
Fowler的崇敬買(mǎi)了這本書(shū),里面的英文不是很難,而且Martin的寫(xiě)作風(fēng)格也讓閱讀充滿(mǎn)樂(lè)趣,時(shí)間關(guān)系,只讀了3章
?
《網(wǎng)站重構(gòu)》:所有進(jìn)行B/S開(kāi)發(fā)的程序員都應(yīng)該看一看,哪怕是走馬觀(guān)花
《深入體驗(yàn)Java Web開(kāi)發(fā)內(nèi)幕》:此書(shū)適合有一定Java
Web開(kāi)發(fā)經(jīng)驗(yàn)的人看,不過(guò)看完以后,印象最深的還是封二上的那句話(huà):“80%的內(nèi)容為原創(chuàng),60%的內(nèi)容絕無(wú)僅有,絕不在書(shū)中加一些【輔料】來(lái)充篇幅,奉獻(xiàn)給讀者的全部都是【干貨】”。嗯,干貨,F(xiàn)*cking
Good! 哈哈
?
?
?
?
文章來(lái)源:
http://blog.sina.com.cn/u/4a5ca0240100075g
原文
?
早上八點(diǎn)準(zhǔn)時(shí)到了沈陽(yáng)的一家軟件公司,看了看我的簡(jiǎn)歷后,就問(wèn)了我些關(guān)于JAVA上的問(wèn)題,我答的還可以,后來(lái)讓我上機(jī)做兩個(gè)小程序,第一打印等腰三角形,第二寫(xiě)一個(gè)JAVA操作數(shù)據(jù)庫(kù),并可以設(shè)置進(jìn)行五分鐘一備份數(shù)據(jù),并且可以還原,生成日志文件,對(duì)我來(lái)說(shuō),挺難的,剛做第一題,三角形我是打出來(lái)了,但不是等腰的,是直角的,我郁悶,第二題我也不會(huì)做,就根面試的人說(shuō)了我不會(huì),后來(lái)面試的人,說(shuō)我這么簡(jiǎn)單的你都不會(huì)做,我真懷疑你有沒(méi)有工作經(jīng)驗(yàn),他說(shuō)他們那打掃衛(wèi)生的都能把三角形打印出來(lái),說(shuō)著他就叫了一個(gè)掃地的過(guò)來(lái),打印個(gè)三角形,不到五分鐘的時(shí)候,等腰三角型就打印出來(lái)了,我當(dāng)時(shí)看著儍了眼,我心想難道我真的不適合做開(kāi)發(fā)嗎?我郁悶!
?
回復(fù)也很搞笑,不妨看看:
文章來(lái)源:
http://blog.sina.com.cn/u/4a5ca0240100075h
某生 20:29:25
老實(shí)。我剛看了你那個(gè)視頻(
注:指Struts +
Spring +
Hibernate做的登錄demo)。我不明白,業(yè)務(wù)類(lèi)寫(xiě)接口是為了代理吧?DAO也作接口為什么啊???
付老實(shí) 20:29:39
靈活
某生 20:29:54
怎么個(gè)靈活法?
付老實(shí) 20:30:13
可以有多種實(shí)現(xiàn)
某生 20:30:32
還是不明白,還要什么實(shí)現(xiàn)阿?
某生 20:31:30
我可不可以所有dao只寫(xiě)一個(gè)接口,規(guī)范幾個(gè)常用方法的實(shí)現(xiàn)阿?
付老實(shí) 20:31:46
沒(méi)必要
付老實(shí) 20:32:06
比如PersonDAO,今天我想用hibernate實(shí)現(xiàn),明天想用JDBC實(shí)現(xiàn)
某生 20:32:13
付老實(shí) 20:32:19
后天想用File IO實(shí)現(xiàn)
某生 20:33:02
這么個(gè)靈活法,,,,
那就是每個(gè)dao都要有接口?
付老實(shí) 20:33:07
讓這三種實(shí)現(xiàn)類(lèi)都去implements
PersonDAO接口,在Spring的配置文件中你就可以想把哪個(gè)注入給service就注入哪個(gè)
付老實(shí) 20:33:12
是的
某生 20:33:18
業(yè)務(wù)層也是?
付老實(shí) 20:33:39
嗯(
注:業(yè)務(wù)層也可能會(huì)有不同的實(shí)現(xiàn)方式)
某生 20:34:24
也好啊,我本來(lái)就想做完hibernate實(shí)現(xiàn)有時(shí)間的話(huà)再做一遍spring模板實(shí)現(xiàn)
付老實(shí) 20:35:07
呵呵,好啊,可以更新博客了
文章來(lái)源:
http://blog.sina.com.cn/u/4a5ca0240100075n
?昨天一時(shí)興起就和許老師去新華文軒買(mǎi)了兩本RoR的書(shū),準(zhǔn)備這個(gè)寒假專(zhuān)供此道,如果順利的話(huà),再用它做一個(gè)缺陷管理系統(tǒng)的demo出來(lái)。
?不過(guò)研究了兩天發(fā)現(xiàn),直接從RoR入手似乎不是很妥當(dāng),應(yīng)該先學(xué)好Ruby,接下來(lái)再Rails。不過(guò)書(shū)已經(jīng)買(mǎi)了,就硬著頭皮搞吧,還好下載了一本Programming
Ruby第二版,遇到不懂的可以查閱。
?說(shuō)說(shuō)這兩天來(lái)(準(zhǔn)確的說(shuō)是今天下午到晚上)對(duì)Rails這個(gè)基于Ruby框架的認(rèn)識(shí)。
?首先它是基于MVC的,這個(gè)一點(diǎn)也不奇怪,那么就分開(kāi)介紹吧
?控制器:
??前端控制器:因?yàn)楹蚃2EE的實(shí)現(xiàn)機(jī)制不太一樣,所以前端控制器不向Struts中的ActionServlet那么明顯,初步估計(jì)是由public目錄下的dispatch.*組成的。雖然實(shí)現(xiàn)機(jī)制可能不同,但是做的事情大同小異。
??應(yīng)用控制器:類(lèi)似于JSF中的action,一個(gè)應(yīng)用控制器中可以有多個(gè)行為(action)。按照Rails的命名規(guī)約,一個(gè)應(yīng)用控制器類(lèi)必須以Controller結(jié)尾,其中的每一個(gè)public方法都是一個(gè)action。action中可以調(diào)用模型進(jìn)行處理,處理完畢后默認(rèn)跳轉(zhuǎn)到action同名的rhtml頁(yè)面(視圖),也可以用redirect_to方法跳轉(zhuǎn)到其他視圖。
??
??(注:我看的書(shū)中并沒(méi)有區(qū)分前端控制器,和應(yīng)用控制器,這里沿用了Struts中的叫法)
?模型:
??
??模型應(yīng)該負(fù)責(zé)提供數(shù)據(jù)、封裝業(yè)務(wù)邏輯、必要時(shí)還需要數(shù)據(jù)的持久化。先看看在J2EE中模型的實(shí)現(xiàn):
?
??方式1:EJB中的實(shí)體Bean
??優(yōu)點(diǎn):數(shù)據(jù)、業(yè)務(wù)邏輯、持久化功能全部提供,代碼少
??缺點(diǎn):持久化功能不靈活,導(dǎo)致一些業(yè)務(wù)邏輯難以?xún)?yōu)雅的實(shí)現(xiàn)。需要大量配置文件
??方式2:JavaBean
??優(yōu)點(diǎn):簡(jiǎn)單
??缺點(diǎn):大量重復(fù)的編碼
??方式3:Hibernate中的PO對(duì)象+DAO對(duì)象
??優(yōu)點(diǎn):代碼少
??缺點(diǎn):po和dao是分離的,導(dǎo)致“貧血類(lèi)”,Hibernate自身對(duì)事物的管理比較弱。需要大量配置文件,映射對(duì)象關(guān)系時(shí)比較復(fù)雜。如加入Spring則會(huì)進(jìn)一步增加代碼的復(fù)雜度
??可以看到,J2EE中各種模型實(shí)現(xiàn)都或多或少有自己的缺陷(其中我最看好的還是實(shí)體Bean,希望EJB
3.0能一轉(zhuǎn)2.0的頹勢(shì))
??而在Rails中已經(jīng)使用了ORM,與Hibernate比這個(gè)ORM不需要大量的配置文件,只需要遵守命名規(guī)約,并在代碼中映射對(duì)象間的關(guān)系。更像EJB
3.0吧。
??Rails中模型的優(yōu)點(diǎn)在于將數(shù)據(jù)、業(yè)務(wù)邏輯、持久化功能放在一起了,并且借助于Ruby強(qiáng)大的繼承功能,你并不會(huì)覺(jué)得模型變得臃腫,甚至更加簡(jiǎn)單。
??缺點(diǎn)嘛,自然就是剛學(xué)的時(shí)候有些摸不著頭腦,呵呵。
??據(jù)說(shuō)Rails中模型還有一種實(shí)現(xiàn)方式,看到后幾章再說(shuō)吧。
?視圖:
??視圖沒(méi)有什么好說(shuō)的,雖然里面確實(shí)有一些新東西,比如類(lèi)似于tiles的layout(布局),神奇般的獲取模型中的數(shù)據(jù),可以用于取代標(biāo)簽庫(kù)的helper等,不過(guò)這些特性并不至于令人瞠目結(jié)舌。
?總結(jié)一下,我覺(jué)得Rails也沒(méi)有什么特別神奇之處,當(dāng)然可能是因?yàn)槲疫€剛?cè)腴T(mén)。目前為止最震撼我的是借助于ruby腳本,可以快速根據(jù)數(shù)據(jù)表生成應(yīng)用控制器、模型、視圖(Rails的術(shù)語(yǔ)叫scaffold【骨架】),在很短的時(shí)間內(nèi)完成一個(gè)CRUD的界面。但是J2EE下的AppFuse也能實(shí)現(xiàn)這個(gè)功能。
?直到現(xiàn)在我還是固執(zhí)的認(rèn)為Ruby的快速開(kāi)發(fā)就在于它提供了更多的api和更多的復(fù)雜語(yǔ)法。當(dāng)然,這是一種成見(jiàn),希望把這本書(shū)看完后會(huì)對(duì)Ruby和Rails有更深的了解
文章來(lái)源:
http://blog.sina.com.cn/u/4a5ca0240100075p
以前在講類(lèi)的時(shí)候總喜歡舉貓抓老鼠的例子,今天寫(xiě)了一個(gè)Ruby版,稍后獻(xiàn)上Ruby語(yǔ)法速查
?
class Cat
? def initialize(name, speed)
??? @name =
name
??? @speed =
speed
? end
???
? def catch(rat)
??? if @speed
> rat.speed
?????
puts @name + " CAN catch " + rat.name
??? else
?????
puts @name + " CAN NOT catch " + rat.name
??? end
? end
end
???
class Rat
? attr_reader :speed
? attr_reader :name
? def initialize(name, speed)
??? @name =
name
??? @speed =
speed
? end
?end
?
tom = Cat.new('Tom', 60)
jerry = Rat.new('Jerry', 50)
?
tom.catch(jerry)
文章來(lái)源:
http://blog.sina.com.cn/u/4a5ca02401000760
以前在講多態(tài)的時(shí)候總喜歡舉父親打孩子的例子,今天寫(xiě)了一個(gè)Ruby版,稍后獻(xiàn)上Ruby語(yǔ)法速查
class Father
? attr_accessor :name
?
? def initialize(name)
??? @name =
name
? end
?
? def beat(child)
???
???
child.beaten
???
? end
?
end
class Son < Father
? def beaten
??? puts @name +
" is running away while father beat him";
? end
?
end
class Daughter < Father
? def beaten
??? puts @name +
" is crying while father beat her";
? end
?
end
father = Father.new('Father')
son = Son.new('Son')
daughter = Daughter.new('Daughter')
father.beat(son)
father.beat(daughter)
文章來(lái)源:
http://blog.sina.com.cn/u/4a5ca02401000761