一種優雅的流行架構:Struts+Spring+Hibernate[1]

發表于:2008-08-25來源:作者:點擊數: 標簽:
用 java 來建立一個很有價值的web 應用不是一個簡單的任務。在架構這個應用時要考慮很多的因素和問題。從更高的層次來看, 開發 人員面臨著關于如何構建用戶接口,何處駐留業務邏輯,以及如何實現數據持久性這些問題。這3層都有各自的問題需要回答。而每一層
 用java來建立一個很有價值的web 應用不是一個簡單的任務。在架構這個應用時要考慮很多的因素和問題。從更高的層次來看,開發人員面臨著關于如何構建用戶接口,何處駐留業務邏輯,以及如何實現數據持久性這些問題。這3層都有各自的問題需要回答。而每一層又需要實現那些技術?應用如何設計來進行松散耦合并能進行靈活變更?應用架構是否允許某一層變更而不影響到其它的層次?應用應該如何處理容器一級的服務比如事務?

  在為你的應用創建一個架構之前有許多問題需要澄清。幸運的是,有很多開發者都意識到這個問題,并建立了很多框架來解決這些問題。一個良好的框架可以讓開發人員減輕重新建立解決復雜問題方案的負擔和精力;它可以被擴展以進行內部的定制化;并且有強大的用戶社區來支持它??蚣芡ǔD芎芎玫慕鉀Q一個問題。然而,你的應用是分層的,可能每一個層都需要各自的框架。僅僅解決UI問題并不意味著你能夠很好的將業務邏輯和持久性邏輯和UI 組件很好的耦合。例如,你不應該使具有JDBC代碼的業務邏輯放入控制器之中,這不是控制器應該提供的功能。一個UI 控制器應該是輕量化的組件,由它代表對UI范圍之外的其它應用層的服務調用。良好的框架自然地形成代碼分離的原則。更為重要的是,框架減輕了開發人員從頭構建持久層代碼的精力,從而集中精力來應用邏輯上,這對客戶端來說更為重要。

  本文討論了如何結合幾個著名的框架來達到松散耦合,如何設計你的架構,以及如何達到各個層次的一致性設計。面臨的挑戰是,將框架整合起來,以使每一層都向另外的層次以一種松散的方式來暴露接口,而不管底層功能使用的是什么技術。本文還討論整合3種著名開源框架的一種策略。對表現層,我們使用Struts;業務層使用Spring;對于持久層我們使用的是Hibernate。你盡可以取代這里的某個框架而使用你喜歡的框架已達到同樣的效果。圖1顯示了框架被整合起來時,從最高層次看到的視圖。

  應用層

  許多設計良好的web 應用,可以被按職責分為四層。這些層次是表現層、持久層、業務層、和領域模型層。每一個層次都有其獨特的職責,不能把各自的功能與其它層次相混合。每一個應用層都應該和其它層隔離開來,但允許使用接口在層間進行通信。我們開始來看看每個層,并討論一下它們各自都應該提供什么和不應該提供什么。

  表現層

  一個典型的web 應用的末端是表現層。許多Java 開發者都知道Struts 提供了什么東西。然而,太多時候,耦合代碼比如業務邏輯被放進org.apache.struts.Action中。所以,我們先總結一下Struts 之類的框架應該提供什么。下面就是Struts 的職責所在:

  ◆管理用戶的請求和響應

  ◆提供一個控制起來將調用委托到業務邏輯和其他上游處理

  ◆將來自于拋出例外的其他層的例外處理到Struts Action 中

  ◆組裝可以在視圖中表現的模型對象

  ◆執行UI 校驗

  下面是一些經??梢允褂肧truts進行編碼但是不應該和表現層關聯的事情:

  ◆直接和數據庫交互,比如JDBC 調用

  ◆與應用相關的業務邏輯和校驗

  ◆事務管理

  ◆在表現層中引入這些類型的代碼將導致類型耦合和維護負擔。

  持久層

  一個典型Web應用的另一端是持久層。這也是應用中最容易很快失控的地方。開發者通常低估了自己構建自己的持久層框架的挑戰。一個定制的,內部開發的持久層不僅需要大量的開發時間,并且通常缺乏功能和難以管理。目前有許多解決這些問題的開源對象關系映射 (ORM) 框架。特別地, Hibernate 框架就允許Java中的對象-關系的持久性和查詢服務。Hibernate 對已經熟悉了SQL 和JDBC API 的Java開發者來或具有中度的學習曲線。Hibernate 的持久對象基于POJO和Java 群集(collections)。此外,使用Hibernate 不和你的IDE接口。下面列出了你需要在持久性框架中編寫的代碼類型:

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97