<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Gay Bird

    登高者必自卑,行遠(yuǎn)者必自邇,在這個(gè)世界上,重要的不是你正站在那里,而是你正朝什么方向移動(dòng)......

    編程經(jīng)驗(yàn)系列-Java學(xué)習(xí)雜談(七)

     終于又靜下來(lái)繼續(xù)寫這個(gè)主題的續(xù)篇,前六篇主要講了一些J2se方面的經(jīng)驗(yàn)和感受, 眼下Java應(yīng)用范圍已經(jīng)被J2ee占據(jù)了相當(dāng)大的一塊領(lǐng)域,有些人甚至聲稱Java被J2ee所取代了。不知道大家如何來(lái)理解所謂的J2ee (Java2       Enterprise       Edition),也就是Java企業(yè)級(jí)應(yīng)用?

        筆者的觀點(diǎn)是,技術(shù)的發(fā)展是順應(yīng)世界變化的趨勢(shì)的,從C/S過(guò)渡到B/S模式,從客戶端的角度考慮企業(yè)級(jí)應(yīng)用或者說(shuō)電子商務(wù)領(lǐng)域不在關(guān)心客戶端維護(hù)問(wèn)題,這個(gè)任務(wù)已經(jīng)交給了任何一臺(tái)PC都會(huì)有的瀏覽器去維護(hù);從服務(wù)器端的角度考慮,以往C/S中的TCP/IP協(xié)議實(shí)現(xiàn)載體ServerSocket被Web       Server       Container所取代,例如大家都很熟悉的Tomcat、JBoss、WebLogic等等。總之一切的轉(zhuǎn)變都是為了使得Java技術(shù)能更好的為人類生產(chǎn)生活所服務(wù)。

        有人會(huì)問(wèn),直接去學(xué)J2ee跳過(guò)J2se行否?筆者是肯定不贊成的,實(shí)際上確實(shí)有人走這條路,但筆者自身體會(huì)是正是由于J2se的基礎(chǔ)很牢固,才會(huì)導(dǎo)致在J2ee學(xué)習(xí)的道路上順風(fēng)順?biāo)R(shí)點(diǎn)上不會(huì)有什么迷惑的地方。舉個(gè)簡(jiǎn)單的例子吧:

        筆者曾經(jīng)跟大學(xué)同學(xué)討論下面這兩種寫法的區(qū)別:

        ArrayList       list       =       new       ArrayList();                 //筆者不說(shuō)反對(duì),但至少不贊成

        List       list       =       new       ArrayList();                           //筆者支持

        曾經(jīng)筆者跟同學(xué)爭(zhēng)論了幾個(gè)小時(shí),他非說(shuō)第一種寫法更科學(xué),第二種完全沒有必要。我無(wú)法完全說(shuō)服他,但筆者認(rèn)為良好的習(xí)慣和意識(shí)是任何時(shí)候都應(yīng)該針對(duì)接口編程,以達(dá)到解耦合和可擴(kuò)展性的目的。下面就以接口開始進(jìn)入J2ee的世界吧:

        1.   J2ee與接口

        每一個(gè)版本的J2ee都對(duì)應(yīng)著一個(gè)確定版本的JDK,J2ee1.4對(duì)應(yīng)Jdk1.4,現(xiàn)在比較新的是JDK5.0,自然也會(huì)有J2EE       5.0.其實(shí)筆者一直在用的是J2EE1.4,不過(guò)沒什么關(guān)系,大家可以下任何一個(gè)版本的J2ee       api來(lái)稍微瀏覽一下。筆者想先聲明一個(gè)概念,J2ee也是源自Java,所以底層的操作依然調(diào)用到很多J2se的庫(kù),所以才建議大家先牢牢掌握J(rèn)2se 的主流技術(shù)。

        J2ee       api有一個(gè)特點(diǎn),大家比較熟悉的幾個(gè)包java.jms、javax.servlet.http、javax.ejb等都以interface居多,實(shí)現(xiàn)類較少。其實(shí)大家真正在用的時(shí)候百分之六十以上都在反復(fù)的查著javax.servlet.http這個(gè)包下面幾個(gè)實(shí)現(xiàn)類的api函數(shù),其他的包很少問(wèn)津。筆者建議在學(xué)習(xí)一種技術(shù)之前,對(duì)整體的框架有一個(gè)了解是很有必要的,J2ee旨在通過(guò)interface的聲明來(lái)規(guī)范實(shí)現(xiàn)的行為,任何第三方的廠商想要提供自己品牌的實(shí)現(xiàn)前提也是遵循這些接口定義的規(guī)則。如果在從前J2se學(xué)習(xí)的道路上對(duì)接口的理解很好的話,這里的體會(huì)將是非常深刻的,舉個(gè)簡(jiǎn)單的例子:

        public       interface       Mp3{

        public       void       play();

        public       void       record();

        public       void       stop();}

        如果我定義這個(gè)簡(jiǎn)單的接口,發(fā)布出去,規(guī)定任何第三方的公司想推出自己的名字為Mp3的產(chǎn)品都必須實(shí)現(xiàn)這個(gè)接口,也就是至少提供接口中方法的具體實(shí)現(xiàn)。這個(gè)意義已經(jīng)遠(yuǎn)遠(yuǎn)不止是面向?qū)ο蟮亩鄳B(tài)了,只有廠商遵循J2ee的接口定義,世界上的J2ee程序員才能針對(duì)統(tǒng)一的接口進(jìn)行程序設(shè)計(jì),最終不用改變代碼只是因?yàn)槭褂昧瞬煌瑥S商的實(shí)現(xiàn)類而有不同的特性罷了,本質(zhì)上說(shuō),無(wú)論哪一種廠商實(shí)現(xiàn)都完成了職責(zé)范圍內(nèi)的工作。這個(gè)就是筆者想一直強(qiáng)調(diào)的,針對(duì)接口編程的思想。

        接口到底有什么好處呢?我們這樣設(shè)想,現(xiàn)在有AppleMp3、SonyMp3、SamsungMp3都實(shí)現(xiàn)了這個(gè)Mp3的接口,于是都有了play、 record、stop這三個(gè)功能。我們將Mp3產(chǎn)品座位一個(gè)組件的時(shí)候就不需要知道它的具體實(shí)現(xiàn),只要看到接口定義知道這個(gè)對(duì)象有3個(gè)功能就可以使用了。那么類似下面這樣的業(yè)務(wù)就完全可以在任何時(shí)間從3個(gè)品牌擴(kuò)展到任意個(gè)品牌,開個(gè)玩笑的說(shuō),項(xiàng)目經(jīng)理高高在上的寫完10個(gè)接口里的方法聲明,然后就丟給手下的程序員去寫里面的細(xì)節(jié),由于接口已經(jīng)統(tǒng)一(即每個(gè)方法傳入和傳出的格式已經(jīng)統(tǒng)一),經(jīng)理只需關(guān)注全局的業(yè)務(wù)就可以天天端杯咖啡走來(lái)走去了:

        public       Mp3       create();

        public       void       copy(Mp3       mp3);

        public       Mp3       getMp3();

        最后用一個(gè)簡(jiǎn)單的例子說(shuō)明接口:一個(gè)5號(hào)電池的手電筒,可以裝入任何牌子的5號(hào)電池,只要它符合5號(hào)電池的規(guī)范,裝入之后任何看不到是什么牌子,只能感受到手電筒在完成它的功能。那么生產(chǎn)手電筒的廠商和生產(chǎn)5號(hào)電池的廠商就可以完全解除依賴關(guān)系,可以各自自由開發(fā)自己的產(chǎn)品,因?yàn)樗鼈兌甲袷?號(hào)電池應(yīng)有的形狀、正負(fù)極位置等約定。這下大家能對(duì)接口多一點(diǎn)體會(huì)了么?

     2.   組件和容器

        針對(duì)接口是筆者特意強(qiáng)調(diào)的J2ee學(xué)習(xí)之路必備的思想,另外一個(gè)就是比較常規(guī)的組件和容器的概念了。很多教材和專業(yè)網(wǎng)站都說(shuō)J2EE的核心是一組規(guī)范與指南,強(qiáng)調(diào)J2ee的核心概念就是組件+容器,這確實(shí)是無(wú)可厚非的。隨著越來(lái)越多的J2ee框架出現(xiàn),相應(yīng)的每種框架都一般有與之對(duì)應(yīng)的容器。

        容器,是用來(lái)管理組件行為的一個(gè)集合工具,組件的行為包括與外部環(huán)境的交互、組件的生命周期、組件之間的合作依賴關(guān)系等等。J2ee包含的容器種類大約有 Web容器、Application       Client容器、EJB容器、Applet客戶端容器等。但在筆者看來(lái),現(xiàn)在容器的概念變得有點(diǎn)模糊了,大家耳熟能詳是那些功能強(qiáng)大的開源框架,比如 Hibernate、Struts2、Spring、JSF等,其中Hibernate就基于JDBC的基礎(chǔ)封裝了對(duì)事務(wù)和會(huì)話的管理,大大方便了對(duì)數(shù)據(jù)庫(kù)操作的繁瑣代碼,從這個(gè)意義上來(lái)說(shuō)它已經(jīng)接近容器的概念了,EJB的實(shí)體Bean也逐漸被以Hibernate為代表的持久化框架所取代。

        組件,本意是指可以重用的代碼單元,一般代表著一個(gè)或者一組可以獨(dú)立出來(lái)的功能模塊,在J2ee中組件的種類有很多種,比較常見的是EJB組件、DAO組件、客戶端組件或者應(yīng)用程序組件等,它們有個(gè)共同特點(diǎn)是分別會(huì)打包成。war,。jar,。jar,。ear,每個(gè)組件由特定格式的xml描述符文件進(jìn)行描述,而且服務(wù)器端的組件都需要被部署到應(yīng)用服務(wù)器上面才能夠被使用。

        稍微理解完組件和容器,還有一個(gè)重要的概念就是分層模型,最著名的當(dāng)然是MVC三層模型。在一個(gè)大的工程或項(xiàng)目中,為了讓前臺(tái)和后臺(tái)各個(gè)模塊的編程人員能夠同時(shí)進(jìn)行工作提高開發(fā)效率,最重要的就是實(shí)現(xiàn)層與層之間的耦合關(guān)系,許多分層模型的宗旨和開源框架所追求的也就是這樣的效果。在筆者看來(lái),一個(gè)完整的 Web項(xiàng)目大概有以下幾個(gè)層次:

        a)   表示層(Jsp、Html、Javascript、Ajax、Flash等等技術(shù)對(duì)其支持)

        b)   控制層(Struts、JSF、WebWork等等框架在基于Servlet的基礎(chǔ)上支持,負(fù)責(zé)把具體的請(qǐng)求數(shù)據(jù)(有時(shí)卸載重新裝載)導(dǎo)向適合處理它的模型層對(duì)象)

        c)   模型層(筆者認(rèn)為目前最好的框架是Spring,實(shí)質(zhì)就是處理表示層經(jīng)由控制層轉(zhuǎn)發(fā)過(guò)來(lái)的數(shù)據(jù),包含著大量的業(yè)務(wù)邏輯)

        d)   數(shù)據(jù)層(Hibernate、JDBC、EJB等,由模型層處理完了持久化到數(shù)據(jù)庫(kù)中)

        當(dāng)然,這僅僅是筆者個(gè)人的觀點(diǎn),僅僅是供大家學(xué)習(xí)做一個(gè)參考,如果要實(shí)現(xiàn)這些層之間的完全分離,那么一個(gè)大的工程,可以僅僅通過(guò)增加人手就來(lái)完成任務(wù)。雖然《人月神話》中已經(jīng)很明確的闡述了增加人手并不能是效率增加,很大程度上是因?yàn)楸舜俗龅墓ぷ饔许樞蛏系囊蕾囮P(guān)系或者說(shuō)難度和工作量上的巨大差距。當(dāng)然理想狀態(tài)在真實(shí)世界中是不可能達(dá)到的,但我們永遠(yuǎn)應(yīng)該朝著這個(gè)方向去不斷努力。最開始所提倡的針對(duì)接口來(lái)編程,哪怕是小小的細(xì)節(jié),寫一條List       list=       =       new       ArrayList()語(yǔ)句也能體現(xiàn)著處處皆使用接口的思想在里面。Anyway,這只是個(gè)開篇,筆者會(huì)就自己用過(guò)的J2ee技術(shù)和框架再細(xì)化談一些經(jīng)驗(yàn)

    posted on 2008-09-12 17:21 Sky Yi 閱讀(151) 評(píng)論(0)  編輯  收藏 所屬分類: 編程經(jīng)驗(yàn)系列-Java學(xué)習(xí)雜談(轉(zhuǎn))

    主站蜘蛛池模板: 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 性xxxx视频免费播放直播| 一本久到久久亚洲综合| 在线精品自拍亚洲第一区| 女人张开腿等男人桶免费视频| 亚洲成aⅴ人片在线观| 国产成人免费高清激情明星| 亚洲宅男天堂a在线| 中文字幕无码免费久久99| 亚洲日本乱码卡2卡3卡新区| 最近中文字幕无免费视频| 一本色道久久88—综合亚洲精品| 成年男女男精品免费视频网站| 亚洲人成无码网站在线观看| 午夜国产羞羞视频免费网站| 一级黄色免费大片| 亚洲动漫精品无码av天堂| ww在线观视频免费观看| 亚洲伊人久久大香线蕉结合| 国产真人无遮挡作爱免费视频| 一级一片免费视频播放| 婷婷亚洲久悠悠色悠在线播放| 我的小后妈韩剧在线看免费高清版| 色在线亚洲视频www| 免费一区二区视频| 国产精品成人亚洲| 在线日韩日本国产亚洲| 免费无码又爽又刺激高潮视频| 亚洲剧情在线观看| 免费午夜爽爽爽WWW视频十八禁| 精选影视免费在线 | 亚洲成人免费在线观看| 四虎永久免费地址在线网站| 花蝴蝶免费视频在线观看高清版| 久久久亚洲欧洲日产国码是AV| 午夜成人免费视频| 成人黄网站片免费视频 | 8090在线观看免费观看| 亚洲AV成人无码网站| 亚洲精品乱码久久久久久中文字幕 | 九九九国产精品成人免费视频|