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

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

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

    泥巴麒麟的BLOG

    shenAwesome@hotmail.com 縱不能,將醉做生涯,休拘束

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      195 Posts :: 2 Stories :: 80 Comments :: 0 Trackbacks

    目前情況

           自動(dòng)工單管理系統(tǒng),使用自開(kāi)發(fā)的類似struts的架構(gòu),數(shù)據(jù)庫(kù)訪問(wèn)經(jīng)過(guò)包裝,返回string數(shù)組。 其架構(gòu)問(wèn)題:

    Action使用同步鎖,導(dǎo)致在同一時(shí)間只能進(jìn)行一次web訪問(wèn),如同時(shí)有其他訪問(wèn),將不必要的被阻塞。

    結(jié)構(gòu)不夠清晰,不能夠完全按mvc的思想明確的分離各層邏輯。jsp代碼過(guò)多且結(jié)構(gòu)零亂,沒(méi)有把通用的代碼用taglib等技術(shù)抽象,后續(xù)開(kāi)發(fā)困難

    業(yè)務(wù)邏輯和數(shù)據(jù)庫(kù)緊密相關(guān),而沒(méi)有從表實(shí)現(xiàn)中抽象出來(lái)。同時(shí),在每次使用同樣的業(yè)務(wù)邏輯的時(shí)候都要反復(fù)的進(jìn)行相關(guān)sql編程。故而與數(shù)據(jù)庫(kù)有強(qiáng)耦合,相關(guān)程序重用性低,可讀性差。其翻頁(yè)機(jī)制邏輯橫貫架構(gòu),使層次高度耦合,而數(shù)據(jù)庫(kù)封裝也可能存在性能問(wèn)題。

    同時(shí),客戶也提出了不少整改意見(jiàn),而在原版本的修改和升級(jí)都會(huì)較為困難,而且對(duì)長(zhǎng)期的維護(hù)不利。

    項(xiàng)目分析:

           目前的各種業(yè)務(wù)管理系統(tǒng)還是將以j2eeb/s架構(gòu)為主流,所以有必要完成一個(gè)通用的,穩(wěn)固的整體架構(gòu)作為以后各種應(yīng)用的堅(jiān)實(shí)基礎(chǔ)。

    我認(rèn)為應(yīng)盡可能使用業(yè)內(nèi)先進(jìn)的免費(fèi)框架技術(shù)而不是自開(kāi)發(fā)框架。好處是:

    這些框架技術(shù)凝聚很多業(yè)內(nèi)精英的智慧,而且經(jīng)過(guò)發(fā)布和使用,技術(shù)體系已經(jīng)成熟,性能有所保障。

    層次清晰,符合先進(jìn)的技術(shù)理念和設(shè)計(jì)模式。同時(shí)也容易找到熟悉相關(guān)技術(shù)的人才,維護(hù)和后續(xù)開(kāi)發(fā)方便。

    相比之下自開(kāi)發(fā)框架因?yàn)榧夹g(shù)實(shí)力和時(shí)間問(wèn)題,很難達(dá)到這些業(yè)內(nèi)領(lǐng)先框架的技術(shù)高度。

       分析一般的j2ee應(yīng)用,應(yīng)有如下層次:

    顯示層 負(fù)責(zé)界面顯示,接受用戶指令

    顯示層有較為經(jīng)典的MVC,即model,view,control,進(jìn)一步了細(xì)化了顯示層的工作。此類著名框架有strutswebwork,spring-mvc等。經(jīng)考察,我認(rèn)為struts雖然是時(shí)間最長(zhǎng)最成熟的技術(shù),但易用性和一些架構(gòu)理念不如webwork,而view層的開(kāi)發(fā)應(yīng)盡可能簡(jiǎn)單快速。故選定用webwork.

     

    邏輯層 負(fù)責(zé)進(jìn)行業(yè)務(wù)邏輯的實(shí)現(xiàn)

    目前的開(kāi)發(fā)過(guò)程,往往陷入邏輯層和數(shù)據(jù)訪問(wèn)層不能分離的情況。面向?qū)ο蟮捻?xiàng)目開(kāi)發(fā)最后演變成成程序員在程序各處手工寫(xiě)sql操表。這樣做的優(yōu)點(diǎn)是開(kāi)發(fā)迅速有效,問(wèn)題是結(jié)構(gòu)將日益混亂,每次邏輯的變化將不得不修改分散于各處的sql語(yǔ)句,而后續(xù)的程序員也必須了解整個(gè)程序和數(shù)據(jù)庫(kù)結(jié)構(gòu)才能進(jìn)行修改。如果是短期小型項(xiàng)目,可以用這種方式。否則的話,我認(rèn)為應(yīng)盡可能貫徹面向?qū)ο笏枷耄褬I(yè)務(wù)邏輯抽象出來(lái)。

    而邏輯層的工作就是針對(duì)實(shí)體對(duì)象進(jìn)行業(yè)務(wù)邏輯的實(shí)現(xiàn)。我們針對(duì)所有的業(yè)務(wù)操作,對(duì)外提供service接口,既服務(wù)接口。這類似tuxedoejb所采用的業(yè)務(wù)外觀模式。而為填補(bǔ)service生存周期管理的空白,我們使用著名的spring框架。優(yōu)點(diǎn):

    實(shí)現(xiàn)Ioc,使各層次的耦合可配置化。

    按需要實(shí)現(xiàn)單例模式等,進(jìn)行生存周期管理

    事務(wù)管理。Spring的宣言事務(wù)管理(Declarative transaction management)使得一般場(chǎng)景的代碼中將不需要考慮事務(wù)問(wèn)題而集中于業(yè)務(wù)邏輯

    攔截機(jī)制將為程序提供很好的擴(kuò)展空間

     

        3.  數(shù)據(jù)訪問(wèn)層 負(fù)責(zé)將類操作映射為數(shù)據(jù)庫(kù)操作。進(jìn)行實(shí)體類的持久化。從而將所有的數(shù)據(jù)訪問(wèn)工作集中起來(lái)

               這一層我們將完成實(shí)體類持久化(persistence),有若干選擇:

                         1 jdbc實(shí)現(xiàn)

                         2 使用ORM工具 hibernate,ibatis,jdo

    經(jīng)過(guò)實(shí)寫(xiě)代碼,感覺(jué)用jdbc實(shí)現(xiàn)dao效率非常低,而且容易出錯(cuò)。經(jīng)過(guò)考量選用hibernate。和ibatis相比雖然上手慢且不夠靈活,但其架構(gòu)思想和強(qiáng)大功能都受到業(yè)內(nèi)一致好評(píng),甚至是ejb3也深受hibernate影響 。所以hibernate是很好的選擇。

    項(xiàng)目設(shè)計(jì)

                  綜上,我們使用 webwork+spring+hibernate的架構(gòu)。

    版本:webwork-2.1.7  spring1.2   hibernate-3.0.3

     

    經(jīng)過(guò)一段時(shí)間的開(kāi)發(fā),目前架構(gòu)基本成形:

          

    o_image002.jpg

           src目錄下為java源碼

    dao    負(fù)責(zé)數(shù)據(jù)訪問(wèn)對(duì)象的定義和實(shí)現(xiàn)

     其中Dao結(jié)尾為接口,Impl結(jié)尾為實(shí)現(xiàn)。目前一般用hibernate做實(shí)現(xiàn)。
    domain 實(shí)體對(duì)象

    logic   針對(duì)實(shí)體對(duì)象封裝的邏輯

     這里service是外觀接口,serviceimpl是實(shí)現(xiàn),考慮目前情況簡(jiǎn)單,并沒(méi)有進(jìn)一步分離邏輯,業(yè)務(wù)邏輯都在impl中完成。

    web    界面相關(guān)的java

     common是一些常用類,如處理中文問(wèn)題的filter.

     displaytag中放了displaytag相關(guān)的類,多為wrapper.

     webwork中都是對(duì)應(yīng)的action

    其中 BaseAction是基本的抽象類,基本后續(xù)開(kāi)發(fā)應(yīng)繼承此類

    CrudAction是為了一般的Crud工作而作的一個(gè)抽象類,可以繼承用來(lái)簡(jiǎn)化工作。

    CaseDispatcher負(fù)責(zé)菜單點(diǎn)擊后分發(fā)到相關(guān)Action,同時(shí)處理權(quán)限和session工作。
     
    其他action按模塊進(jìn)行了組織

    o_image004.jpg

    左邊是webroot的結(jié)構(gòu)

     

     

    重要的配置文件有:

    Spring

    applicationContext.xml

    applicationContext-db.xml

    Webwork

    xwork.xml

    webwork.properties

    i18n

     labels.properties

    log4j

     log4j.properties

    displaytag

     displaytag.properties

    dbConnect

     jdbc.properties

     

    關(guān)于一些技術(shù)難點(diǎn)和細(xì)節(jié):

    1.  各框架連接:springhibernate使用springhibernate支持。Springwebwork使用autoware的攔截機(jī)制自動(dòng)裝配。

    2.  列表的問(wèn)題,采用displaytag。功能強(qiáng)大,使用簡(jiǎn)潔,可實(shí)現(xiàn)排序和數(shù)據(jù)導(dǎo)出。

    3.  數(shù)據(jù)下載,使用displaytag自帶的excel下載

    4.  文件上傳,使用webwork提供的解決方案,用攔截機(jī)制實(shí)現(xiàn)。

    5.jsp代碼組織方面,我們使用taglibcss技術(shù)使jsp中頁(yè)面邏輯減少到最小,一般情況完全可以不使用<% %>script 。同時(shí)我們使用兩個(gè)include來(lái)包含常用的taglib定義,js引用和html結(jié)構(gòu),使jsp代碼非常簡(jiǎn)潔。

    6.  中文問(wèn)題 我們使用filter來(lái)解決頁(yè)面gbkjava程序unicode的轉(zhuǎn)換,同時(shí)通過(guò)正確的設(shè)置數(shù)據(jù)庫(kù)連接url完成和數(shù)據(jù)庫(kù)之間的交互。

    7.  I18n國(guó)際化。我們要求在jsp代碼中不出現(xiàn)中文,所有提示信息都通過(guò)資源文件labels.properties來(lái)完成。頁(yè)面中可以使用jstlwebwork標(biāo)簽來(lái)調(diào)用。

    8.  界面驗(yàn)證問(wèn)題。使用webworkvalidate機(jī)制用xml定義,或在action中代碼判斷。

    posted on 2005-05-30 12:57 泥巴麒麟 閱讀(4952) 評(píng)論(20)  編輯  收藏

    Feedback

    # re: 項(xiàng)目小結(jié)(hibernate + spring + webwork) 2005-06-03 13:55 Emma
    真高深啊,看不懂,做崇拜狀!  回復(fù)  更多評(píng)論
      

    # re: 項(xiàng)目小結(jié)(hibernate + spring + webwork) 2005-06-03 13:55 Emma
    真高深啊,看不懂,做崇拜狀!  回復(fù)  更多評(píng)論
      

    # 真是曲高和寡亞 2005-06-06 13:12 泥巴麒麟
    哎呀呀  回復(fù)  更多評(píng)論
      

    # re: 項(xiàng)目小結(jié)(hibernate + spring + webwork) 2006-03-03 09:39 hathor
    很不錯(cuò)的!  回復(fù)  更多評(píng)論
      

    # re: 項(xiàng)目小結(jié)(hibernate + spring + webwork) 2006-06-21 10:19 nqna
    采用 webwork2.2.2 , 加上 freemarker 應(yīng)該好些。  回復(fù)  更多評(píng)論
      

    # re: 項(xiàng)目小結(jié)(hibernate + spring + webwork) 2006-08-08 09:46 kavon2006
    請(qǐng)問(wèn)如何進(jìn)行action的單元測(cè)試呢?  回復(fù)  更多評(píng)論
      

    # re: 項(xiàng)目小結(jié)(hibernate + spring + webwork) 2006-10-26 15:03 outuo2
    Spring到webwork使用autoware的攔截機(jī)制自動(dòng)裝配,可以簡(jiǎn)單的解釋下嗎  回復(fù)  更多評(píng)論
      

    # re: 項(xiàng)目小結(jié)(hibernate + spring + webwork) 2006-11-24 14:30 leifeng
    hehe  回復(fù)  更多評(píng)論
      

    # re: 項(xiàng)目小結(jié)(hibernate + spring + webwork) 2006-12-11 11:32 泥巴麒麟
    這篇文章是一年半前寫(xiě)的,里面提到的攔截方式,現(xiàn)在很可能有更好的解決方案,加上自己最近也沒(méi)有在搞spring和webwork,所以不敢誤導(dǎo)別人。那個(gè)自動(dòng)裝配的方案本身也很簡(jiǎn)單,記得有人做好了類,google一下就好  回復(fù)  更多評(píng)論
      

    # re: 項(xiàng)目小結(jié)(hibernate + spring + webwork) 2007-02-09 15:04 兔子超人
    displaytag那個(gè)東西是垃圾,數(shù)據(jù)量大一點(diǎn)就麻煩了,首先displaytag設(shè)計(jì)上就沒(méi)有想到為30000條記錄以上的考慮過(guò),查詢出來(lái)的集合全部都放在list里面,這樣有再多的內(nèi)存都會(huì)溢出。

    還有我覺(jué)得你設(shè)計(jì)上還是遺憾,沒(méi)有看見(jiàn)你是如何運(yùn)用webwork模型驅(qū)動(dòng)來(lái)設(shè)計(jì)的。
    這樣說(shuō)是因?yàn)闆](méi)有看出你使用webwork以后和之前使用struts的最大區(qū)別!!

    而且攔截器的在的右邊說(shuō)明上也是不很明顯的能看出來(lái)。切點(diǎn)在什么地方都沒(méi)有看到?!  回復(fù)  更多評(píng)論
      

    # re: 項(xiàng)目小結(jié)(hibernate + spring + webwork) 2007-02-09 15:15 兔子超人
    我又看了一邊,您說(shuō):“感覺(jué)用jdbc實(shí)現(xiàn)dao效率非常低”,請(qǐng)問(wèn)jdbc效率地在了什么地方??如果說(shuō)jdbc效率地,那么hibernate的效率就更低了,hibernate實(shí)現(xiàn)的基礎(chǔ)不可能脫離原始的jdbc。

    你應(yīng)該清楚的認(rèn)識(shí)到hibernate只是在設(shè)計(jì)上引導(dǎo)了你,讓我們認(rèn)識(shí)到模型和模式,hibernate只是讓我們少些了很多代碼,而不是說(shuō)采用了hibernate就能提高效率,希望您不要悟到大家。

    技術(shù)上本質(zhì)的東西是不會(huì)變化多少的,技術(shù)也沒(méi)有高低之分,不存在hibernate和jdbc誰(shuí)好誰(shuí)壞,只有使用者的強(qiáng)弱之別而已。

      回復(fù)  更多評(píng)論
      

    # re: 項(xiàng)目小結(jié)(hibernate + spring + webwork) 2007-02-26 16:10 泥巴麒麟
    感謝這么久前的東西還有人評(píng)論!

    首先關(guān)于displaytag.我認(rèn)為并不能說(shuō)設(shè)計(jì)失誤而是設(shè)計(jì)如此,所以使用非常簡(jiǎn)單,而且不用為分頁(yè)的東西而穿透邏輯層,在列表不大的時(shí)候,和hibernate配合,代碼非常自然簡(jiǎn)練。而且排序無(wú)需依賴Sql字段。但也因此有他的性能問(wèn)題。一個(gè)東西肯定是有缺點(diǎn)和優(yōu)點(diǎn)的,找到符合自己需要的就可以。當(dāng)時(shí)我也測(cè)試了數(shù)據(jù)量,并定死最多選擇10000條,再多的分頁(yè)基本上用戶是沒(méi)可能看的。

    關(guān)于webwork,坦率說(shuō)我對(duì)基于web的mvc設(shè)計(jì)并不是很感興趣,怎么簡(jiǎn)單怎么好。所以webwork比struts好就好在簡(jiǎn)單。而且也很久沒(méi)用webwork了。你所說(shuō)的模型驅(qū)動(dòng)如果我沒(méi)記錯(cuò),指的是直接在action里面直接使用pojo作為一個(gè)field來(lái)傳遞數(shù)據(jù),印象中這個(gè)也沒(méi)什么特別好說(shuō)的,無(wú)非是jsp里格式寫(xiě)正確了就好。如果要我起名字,我寧愿把這個(gè)叫做自動(dòng)裝配,無(wú)非是把頁(yè)面的數(shù)據(jù)自動(dòng)裝到pojo里傳走,省得大家寫(xiě)的累。我寫(xiě)javaBean+jsp的年代就用反射寫(xiě)過(guò)類似的東西,個(gè)人認(rèn)為不是什么大不了的設(shè)計(jì)思想。spring才是有設(shè)計(jì)思想的。

    攔截器實(shí)在記不大清,參考別人做法而已,應(yīng)該是在webwork的配置文件里做的。

    "經(jīng)過(guò)實(shí)寫(xiě)代碼,感覺(jué)用jdbc實(shí)現(xiàn)dao效率非常低,而且容易出錯(cuò)",
    這句話我的意思是當(dāng)時(shí)我在考慮到DAO層次的實(shí)現(xiàn)上,和spring結(jié)合,我可以采用jdbc直接實(shí)現(xiàn),也可以采用hibernate實(shí)現(xiàn),自己試寫(xiě),比較之后認(rèn)為jdbc開(kāi)發(fā)效率低,寫(xiě)好了之后再寫(xiě)測(cè)試,把我累得不行。當(dāng)時(shí)我們的人手太緊,項(xiàng)目日程上不允許你慢慢來(lái)。用hibernate我就基本放心,單元測(cè)試就做得比較弱了。

    我說(shuō)是效率而不是性能,這句話不至于讓人有誤解吧。我覺(jué)得能看到這里的朋友都是有一定基礎(chǔ)的。就好象說(shuō)用c開(kāi)發(fā)比用匯編快。你非要說(shuō)快在那里?匯編最快了,這就抬杠了。








      回復(fù)  更多評(píng)論
      

    # re: 項(xiàng)目小結(jié)(hibernate + spring + webwork)[未登錄](méi) 2007-05-08 11:32 YANG
    個(gè)人覺(jué)得框架這種東西.只是給我們帶來(lái)效率.

    要從性能上講還是能從底層的實(shí)現(xiàn)那才是最好.達(dá)到最佳.

    JDBC是最基本的吧.但性能可是最佳.
    框架用了好幾層.在性能上大大降低.但是效率可是大大的提高.

    所以有得必有失.這是沒(méi)有辦法的辦法....  回復(fù)  更多評(píng)論
      

    # re: 項(xiàng)目小結(jié)(hibernate + spring + webwork) 2007-05-14 23:35 辛酸果凍
    我也在研究但是還有很多地方搞不懂,唉,不知樓主能否讓我看看您的原程序啊,謝謝
    zhoudaqingidea@gmail.com  回復(fù)  更多評(píng)論
      

    # re: 項(xiàng)目小結(jié)(hibernate + spring + webwork) 2007-06-14 15:31 王娟
    摟住,我也想看看源程序,謝謝。我的郵箱:
    juju_good@163.com  回復(fù)  更多評(píng)論
      

    # re: 項(xiàng)目小結(jié)(hibernate + spring + webwork)[未登錄](méi) 2007-06-28 10:18 青穎
    樓主, 我想看看源碼。 能不能發(fā)給我研究一下 謝謝
    發(fā)部分代碼也可以 daitiejian@163.com  回復(fù)  更多評(píng)論
      

    # re: 項(xiàng)目小結(jié)(hibernate + spring + webwork) 2007-07-02 12:00 泥巴麒麟
    源碼是公司產(chǎn)品了。而且這個(gè)文章是2年前做的了,那源碼對(duì)現(xiàn)在來(lái)說(shuō)也沒(méi)太多價(jià)值。  回復(fù)  更多評(píng)論
      

    企訊網(wǎng)創(chuàng)立于2005年10月,創(chuàng)辦之初,受到了眾多企業(yè)從業(yè)者的鼎立支持。但在創(chuàng)辦網(wǎng)站的過(guò)程中我們也經(jīng)歷了重重磨難,并且因?yàn)槟承┰颍W(wǎng)站曾于2007年1月到6月期間停辦。直到2007年7月,企訊網(wǎng)重新開(kāi)辦,并且擁有新域名www.qixoo.com 與 www.qixoo.net 。

    企訊網(wǎng)是一個(gè)溝通平臺(tái)。我們建立本站的初衷是為了建立企業(yè)從業(yè)者與企業(yè)的橋梁,使得員工能與企業(yè)更好的溝通,我們希望員工能在此平臺(tái)為企業(yè)提出一些好的發(fā)展建議,同時(shí)企業(yè)也能傾聽(tīng)員工的聲音,為員工創(chuàng)造一個(gè)更好的環(huán)境。

    企訊網(wǎng)是一個(gè)參考平臺(tái)。通過(guò)本站,可以幫助企業(yè)人員在求職過(guò)程中能有一個(gè)參考,并且查詢相關(guān)的企業(yè)信息,以便企業(yè)人員能找到符合自身發(fā)展的企業(yè)。當(dāng)然,本站的參考信息都是由網(wǎng)友添加,我們不可能驗(yàn)證每一條信息的可靠性,對(duì)于部分企業(yè)的評(píng)價(jià),也許會(huì)比較片面和失實(shí)。大家在求職過(guò)程中,還是應(yīng)以實(shí)際出發(fā),畢竟這里只代表部分聲音。

    企訊網(wǎng)是一個(gè)監(jiān)督平臺(tái)。誠(chéng)然,作為一個(gè)普普通通的網(wǎng)站并沒(méi)有資格與權(quán)利去監(jiān)督一個(gè)企業(yè)的行為。但作為一個(gè)網(wǎng)絡(luò)媒體,雖然還是那么的微小,但我們希望能通過(guò)網(wǎng)絡(luò)的聲音能改變一些企業(yè)不恰當(dāng)?shù)淖龇ǎ呐轮皇且稽c(diǎn)點(diǎn)。我們期望能有一個(gè)良好的企業(yè)大環(huán)境,以利于我們國(guó)家企業(yè)業(yè)的發(fā)展。




      回復(fù)  更多評(píng)論
      

    # re: 項(xiàng)目小結(jié)(hibernate + spring + webwork) 2012-03-28 18:57 泥巴麒麟
    那么多年前的東西,看起來(lái)實(shí)在感慨  回復(fù)  更多評(píng)論
      

    # re: 項(xiàng)目小結(jié)(hibernate + spring + webwork) 2014-01-13 12:39 邱惠平
    很好啊,  回復(fù)  更多評(píng)論
      


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 久久久久久国产精品免费免费| 亚洲线精品一区二区三区影音先锋 | 你懂的在线免费观看| 久久精品国产精品亚洲人人 | 久久精品免费一区二区喷潮 | 亚洲精品乱码久久久久久下载 | 91亚洲自偷手机在线观看| 18禁止观看免费私人影院| 亚洲私人无码综合久久网| 永久免费视频v片www| 久久精品国产亚洲AV| 国产精品美女自在线观看免费| 日本特黄特色AAA大片免费| 亚洲乱码中文字幕综合| 国产精品免费久久| 婷婷精品国产亚洲AV麻豆不片 | 亚洲一级二级三级不卡| 免费a级毛片无码a∨蜜芽试看| 99国产精品免费观看视频| 久久久久se色偷偷亚洲精品av| 日韩精品免费电影| 中文精品人人永久免费| 免费看一级一级人妻片| 亚洲精品色在线网站| 亚洲综合国产成人丁香五月激情| 亚洲视频免费在线播放| 亚洲人成网站在线播放影院在线| 日本特黄特色aa大片免费| 免费国产黄线在线观看| 好先生在线观看免费播放| 国产卡一卡二卡三免费入口| 久久免费国产精品| 亚洲av无码专区在线观看下载| 国产成人精品曰本亚洲79ren| 最近中文字幕2019高清免费| 亚洲国产成人久久一区二区三区| 亚洲好看的理论片电影| 亚洲AV日韩AV永久无码绿巨人| 久久精品国产精品亚洲艾| 国产大片线上免费看| 免费v片在线观看无遮挡|