基於java技術的軟件開發架構總結

marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog.html" frameborder="0" width="728" scrolling="no" height="90">


 


  
 
在具體的實現中,表現層可爲Struts/JSF等,業務層、訪問層可爲JavaBeanEJB等,資源層一般爲數據庫。
 
宏觀上的層次就是這樣,在具體現實中,有如下幾種實現形式:

1 輕量級實現


 
表現層使用基於MVC的框架,比如StrutsJSF
業務層使用JavaBean(就是常說的Service

訪問層使用JavaBean(就是常說的DAO
優點:
 
輕量級實現,簡單明瞭
ü
缺點:
 
難以無法實現分佈式應用
ü
 
以下功能必須通過編程實現ü
 
事務控制²
 
資源管理(包括組件的創建)²
 
線程安全問題²
 
安全性²

2 重量級J2EE實現

表現層依然是基於MVC的框架
訪問層採用實體Bean實現,如果可能最好採用CMP,實現起來更簡潔。此處的實體Bean可以考慮採用本地接口
業務層一分爲二,服務控制器可以由會話Bean充當,用來封裝業務流程(相當於輕量級實現中的Service),也可以考慮採用本地接口;門面也可以由會話Bean充當(一般來說無狀態會話Bean足矣),作爲業務層的入口,應該採用遠程接口。
優點:
 
以下功能可由EJB容器自動實現,或通過配置實現
ü
 
事務控制²
 
遠程訪問²
 
線程安全²
 
資源管理²
 
安全性²
 
可以進行分佈式應用ü
 
因爲採用了EJB,故部分特徵可以由裝配人員來配置(比如事務,安全性等),不需要在軟件中硬編碼ü
 EJB
組件有更好的重用性ü
 
可利用容器提供的其他企業級的功能(比如集羣,容錯,災難恢復等)ü
 
可以加入MDB(實現異步通訊)等技術ü
缺點:
 
開發難度較高
ü
 
如果不恰當的使用實體Bean,會造成效率低下。如果採用CMP,則很多數據訪問的操作不能直接實現。ü
 
缺少良好的開發環境ü
 
軟件可能依賴於具體的EJB容器ü
 EJB
容器可能很貴,開發軟件也可能很貴ü


 

3 輕量級和重量級J2EE的切換

如果項目有需求,並有充分的時間,還可以通過在表現層和業務層的交界處加入業務代表JavaBean + 服務定位器實現)來對錶現層隱藏對業務層訪問的細節(JavaBeanEJB的訪問方式顯然不同),只需替換業務代表就可以切換輕量級和重量級兩種實現。舉例說明,一般電話上都有一個P/T開關(脈衝/音頻開關),隨着開關狀態的不同,撥號時電話機會判斷是使用脈衝撥號還是音頻撥號。


 

這種架構唯一的缺點就是必須寫兩套實現代碼……

4 輕量級J2EE實現


 
訪問層通過JavaBean調用ORM框架實現(HibernateiBatis等),代碼簡潔,功能完備(相對於EJB 2.x而言),如果用的是Hibernate,可以忽略底層數據庫的差異,如果用的是iBatis,則方便對SQL進行優化。

業務層和訪問層依靠AOP框架(如Spring)可以在切面中實現事務,安全性等功能,同時不影響業務代碼。如果採用Spring,其中已經內置了事物切面,並可以輕易的與主流ORM框架進行整合,實現聲明式的事物管理。當然,更可以使用IoC模式降低組件間的耦合性。
優點:
 
可以通過AOP框架實現事物、安全性等功能,同時不影響業務代碼
²
 ORM
框架比CMP更靈活,比BMP更簡潔(相對於EJB² 2.x而言),運行效率也比較高
 
如果使用Spring,可以用更簡單的方式實現J2EE中比較複雜的功能
²
 
無需額外的容器²
 ORM
AOP框架可以找到免費的開源實現,降低項目成本(不過也有人認爲採用開源項目可能綜合成本更高)²
缺點:
 
非官方框架,缺少文檔、技術支持和業界經驗
²
 
採用技術太多,學習曲線較高,難以招到合適的程序員(咱們學員可以考慮在這方面下點功夫,呵呵)²
 
某些企業級的功能輕量級框架還不能實現(或獨立實現)²-----------------------------------------
 
測試、調試均比較複雜²


 
另類之處:
 
使用BMP + Hibernate(具體做法爲BMP中的持久化方法,比如ejbLoad, ejbStore等都委託給Hibernate實現)
優點:
 
藉助於Hibernate強大的ORM功能彌補CMP的不足(特別是EJB-QL

缺點:
 
事物不好控制
 
不倫不類,容易發生未知的錯誤(比如Hibernate自身的緩存可能會於容易提供的緩存衝突)

 
另類之處:
 
將業務層(也可能包含訪問層)包裝成Web Services,支持遠程調用
優點:
 
藉助於Web Services可以實現鬆散耦合分佈式應用,說的大一點,就是傳說中的SOA,呵呵

缺點:
 Web Services
自身效率不高,無狀態,安全性差

   當然,即使不分層,也能做出軟件來,但我們應該思考怎麼做才能最好?如果說分層不好,那麼不分層的優勢又在哪裏呢??如果說分層有性能的損耗,那麼性能損耗在哪裏呢??如果不分層,軟件工程思想中的“分而治之”的原則啓不受到了質疑?
  有人說,分層是爲了減少代碼量,如果分層是爲了減少代碼量,那怎麼能減少,代碼的重用也許會減少
一些,但是程序更多的是業務,我們關心的也只是業務,試問分層的意義就是爲了減少代碼量?
  總之我的觀點就是:軟件分層是必須做的。至於框架,不應該問用不用,而應該問用什麼?要選用實踐
檢驗過的框架,畢竟實踐是檢驗真理的唯一標準。

二年的J2EE開發之後,我們應該掌握了一些主流的架構模式,總結一下:
 
宏觀上講,我們採用了分層的架構,將軟件分爲如下的層次:



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