關於J2EE下的web項目的架構問題方面的思考

    做J2EE已經有一段比較長的日子了,項目也做了好幾個,可對於究竟什麼纔算是一個比較標準的J2EE的實施方案了,又或是對於一個已經有具體需求的項目我們如何將實際需求轉化成程序方案了,這是一個需要思考和總結的問題!

    現在的web項目我們通常分爲三層(也有多層的),表現層,業務邏輯層和持久層,過去剛開始的時候我曾錯誤的把MVC理解對應上面的三層,以爲使用了諸如Strutswebwork2之類的框架來做項目就是實行了三層的解決方案,其實這是錯誤的,MVC的設計模式與我們所說的三層架構是兩個層次的東西,或者可以說不是相對應異或是有某種必然的聯繫的,(當然有些論壇上曾討論過MVC僅僅是對錶現層的一種理解,但我只是聽說過有這種說法,相關的帖子沒有具體看到,所以沒辦法思考他們所說的理由,但我覺得對於MVC,其Modul,Controller如何來對應我們所說的業務邏輯層和持久層了,並沒有很準確的對應,所以我說兩者似乎是不同層次,而且從歷史來看,MVC80年代就有了,而那時恐怕web項目還沒怎麼起步把;那麼還有的說象Struts,webwork2它們是屬於web框架,我覺得這也不是很明確,比如什麼叫web框架,是web項目嗎?那要這麼說j2ee本來就是用來開發web項目的,如果你要說它也可以用在分佈式結構中,也可以用來做中間件,那我要說的是後者是不是也要通過網絡來使用,那從這個層次來說,它們是不是也是web項目的一部分了,所以本身來說web項目就不是個好定義的詞,所以web框架就更來有個定語了)。但對於Struts,webwork2之流的框架,Spring則不然,它要複雜一些,它是一個輕量級的J2EE框架(這也是一部分人的說法,輕量是指不使用EJB),包含了三層體系的實現方式。當然Sun對於這三層體系的實現有它自己的技術,表現層是jsp/servlet,業務邏輯層是session bean,持久層是實體bean

    在這裏我僅嘗試對輕量級的解決方案進行一些總結,對於EJB我並不太熟,僅僅使用過session bean,對於實體bean,消息bean都沒有用過。

    說總結從什麼地方入手了,先從三層解決方案的表現層說起把,那麼首推jsp,當然通過servlet也能往客戶端瀏覽器寫東西,但全在字符串中寫起來不方便(象asp一樣),說到要注意的地方就是jsp中儘量少有java代碼,即在jsp中不要添加過多的業務邏輯代碼,現在在表現層除了jsp,還有不少不錯的開源項目,象freemarker,velocity,Tapestry,我覺得它們主要從兩個方面來改善表現層的開發,一個是讓頁面的組件能夠最大限度的重複使用,(象比較新的webflow,頁面流,spring也有它的webflow,我想它也是爲了更大程度的複用資源,畢竟畫出一個好的頁面,美工的活還是挺難的呀,身有感觸,哈哈!)一個是更好的使表現層更專注與自己的範疇,不要含有過多的業務邏輯。Sun對於jsp也在不斷的出些新的內容,象jsp2.0中的EL,我覺得使用起來就比較方便,當然JSTL這一套標籤庫也因該好好了解和使用。(前段時間玩了玩Tapestry,感覺確實和普通的頁面開發不太一樣,剛開始感覺挺怪的,還要再看看,學習的資料也不是太多!)

    對於業務邏輯層來說,沒有什麼框架性的東西,實際上就是用java來寫,象session bean之類的,實際上其邏輯性的東西就是java類,不過象寫servlet,session bean這些邏輯部分時,它們還是跟具體的容器關聯上了,雖然寫起來可能更容器些,但另一方面要對業務邏輯部分進行測試就要比較麻煩了,因爲要測試,你就必須要啓動容器,而且複用起來也要困難些(我是指跨項目的複用)。在業務邏輯層還有個很顯你功力的地方,就是這些java的方法,類中你的設計模式使用的如何,程序效率的高低和對異常的處理,這些都不是一兩天能提升的,需要長時間的積累和學習。

    對於持久層,解決方案就不少了,因爲它是一個很重要的部分。從Sun官方的實體bean(以前一直是爲人所詬病的,但ejb3.0改了很多,還沒玩過,只是道聽途說),到開源項目Hibernate(一站式的解決方案),iBatis(半站式,實際上就是可以在配置文件中寫sql語句)等等,還有些其它的解決。在對持久層進行操作時有個比較長用的設計模式DAO模式,用它來對傳過來的PO(或DTO)調用相應的操作方法進行持久化,似乎覺得它有點象個Facade的了。

    在web項目開發的三層解決方案中,有個問題就是在這三層中數據應該如何傳輸,很多人覺得應該分開(其實就是進行不同的封裝),比如在業務邏輯層中用VO來表示,而在持久層中用PO來表示,當然進行不同的封裝,其好處就是當某一層的數據需求發生變化時,如果其它層沒變,則其它層的代碼也不用改變了,當然這些object的設計和粒度的把握也是需要下工夫的。

    以上就是我的一些架購問題方面的思考,羅嗦了一些,但也僅僅是泛泛而談,很多東西還是沒太整明白,希望在以後的工作學習中能夠進一步的理解深理解透吧!!

 

 
發佈了34 篇原創文章 · 獲贊 0 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章