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

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

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

    鐵手劍譜

    上善若水
    數據加載中……
    一種優雅的流行架構:Struts+Spring+Hibernate (1)

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

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

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

    clip_image001_0007.gif


     

    應用層

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

    表現層

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

    • 管理用戶的請求和響應
    • 提供一個控制起來將調用委托到業務邏輯和其他上游處理
    • 將來自于拋出例外的其他層的例外處理到Struts Action 中
    • 組裝可以在視圖中表現的模型對象
    • 執行UI 校驗

    下面是一些經常可以使用Struts進行編碼但是不應該和表現層關聯的事情:

    • 直接和數據庫交互,比如JDBC 調用
    • 與應用相關的業務邏輯和校驗
    • 事務管理

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

    持久層

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

    • 查詢關系信息到對象中。Hibernate 是通過稱為HQL的OO查詢語言,或者使用更有表現能力的規則API,來完成這個工作的。除了使用對象而不是表,使用字段而不是列的方式,HQL非常類似于 SQL。也有一些新的特定的HQL 語言特征需要學習;但是,它們是很容易理解和良好編寫的。HQL 是一種用于查詢對象的自然語言,而對象,只需要很少的學習曲線吧。.
    • 存儲、更新和刪除存儲在數據庫中的信息
    • 高級的對象關系映射框架比如Hibernate支持大部分主流SQL數據庫,它們支持父/子關系,事務,繼承和多態。

    下面是應該在持久層避免的一些事情:

    • 業務邏輯應該置于應用的更高層中。這里只允許數據訪問方法。
    • 不應該使持久邏輯和表現邏輯耦合。避免表現組件如JSP或者基于servlet的類中的邏輯直接和數據訪問進行通信。通過將持久性邏輯隔離在其自己的層中,應用將具有更加靈活的修改性而不影響到其他層的代碼。例如, Hibernate 可以使用其他持久框架和API代替,而不需要修改其它層中的代碼。

    業務層

    典型的Web應用的中間組件一般是業務層和服務層。從編程的角度來說,service layer經常被忽略。這種類型的代碼散布于UI表現層和持久層并不是不多見。這些都不是正確的地方因為它導致了緊密耦合的應用和難以維護的代碼。幸運的是,大多數框架都解決了這個問題。這個空間內最流行的兩個框架是Spring 和PicoContainer。它們都被視為是具有非常小的足跡(footprint)并且決定如何將你的對象整合在一起的微容器(microcontainer)。這些框架都建立在一種叫做依賴性注入(dependency injection) (也稱控制反轉(inversion of control:IOC))的簡單概念之上。我們將關注Spring中通過針對命名配置參數的bean屬性的setter 注入的使用。Spring 也允許一種更加高級的構造器注入(constructor injection)形式作為setter injection 的可選替代。對象通過簡單的XML 文件進行連接,該配置文件包含對各種對象的引用,比如事務管理處理器(transaction management handler),對象工廠,包含業務邏輯的服務對象,以及數據訪問對象(DAO)。

    我們隨后會用一些例子來澄清Spring中使用這些改變的方式。

    業務層應該負責下面的問題:

    • 處理應用的業務邏輯和業務校驗
    • 管理事務
    • 允許與其他層進行交互的接口
    • 管理業務級對象之間的依賴性
    • 加入了表現和持久層之間的靈活性,以便它們不需要彼此進行直接通信
    • 從表現層暴露上下文給業務層以獲得業務服務
    • 管理從業務層到表現層的實現

    領域模型層

    最后,因為我們要解決實際的問題的web應用,我們需要一套在不同的層間移動的對象。領域模型層包含的是表達實際業務對象的對象,比如Order, OrderLineItem, Product 等等。這一層允許能讓開發者不再構建和維護不必要的數據傳輸對象DTO來匹配其領域對象。例如, Hibernate允許你讀取數據庫信息到一個領域對象的對象圖中,以便你可以在離線的情況下將其表現在UI層中。這些對象可以被更新并跨過表現層發送回去,然后進行數據庫更新。另外,你不再需要將對象轉變成DTO,因為它們在不同的層間移動時可能會丟失事務。這種模型允許Java 開發者能夠以OO風格的方式很自然的處理對象,而不用編寫額外的代碼。

    整合一個簡單的例子

    到此,應該對各種層次和組件有一個高層的理解了罷。可以開始一些實踐了。再次說明。我們的例子整合了Struts, Spring, 和Hibernate 框架。每個框架都包含大量的內容細節,我們不會多述。我們的目的使用一個例子向你說明如何將它們整合在一起構建一個優雅的Web應用架構。實例將演示一個請求是如何得到各層的服務的。此應用的用戶可以將一個訂單保存在數據庫中并且察看數據中的已有訂單。進一步的增強允許將用戶更新和刪除現有訂單。

    首先,我們將常見我們的領域對象,因為它們是要和各層溝通的。這些對象將允許我們能夠定義那些對象需要持久化,那些業務邏輯需要提供,以及應該設計那些表現接口。接下來,我們將使用Hibernate 來為領域對象配置持久層和定義對象關系映射。然后,我們將定義和配置我們的業務層。在完成這些組件后,我們將討論如何使用Spring將這些層關聯起來。最后,我們將提供一個表現層,它知道如何與業務服務層通信以及如何處理來自于其他層的例外。

    posted on 2005-04-29 11:42 鐵手 閱讀(16393) 評論(21)  編輯  收藏 所屬分類: Java企業架構

    評論

    # re: 一種優雅的流行架構:Struts+Spring+Hibernate (1) 2005-04-30 10:20 Samuel

    并不一定需要struts,Spring的MVC就足夠用了,而且很好用
      回復  更多評論    

    # re: 一種優雅的流行架構:Struts+Spring+Hibernate (1) 2005-05-16 17:11 jony

    看了您的文章,對struts+spring+hibernate的概念有了一定的了解,但是還不知道怎么整合起來使用。
      回復  更多評論    

    # re: 一種優雅的流行架構:Struts+Spring+Hibernate (1) 2005-07-19 15:02 

    翻譯老外的文章,應該注明啊
      回復  更多評論    

    # re: 一種優雅的流行架構:Struts+Spring+Hibernate (1) 2005-07-19 15:12 鐵手

    yes,from Oreiley
      回復  更多評論    

    # 有沒有學習這三者的一個完整例子 2005-07-28 17:49 liuliu

    有沒有學習這三者的一個完整例子,小的項目,我想通過實例來學習這些東西,希望能給指點一下,
      回復  更多評論    

    # re: 一種優雅的流行架構:Struts+Spring+Hibernate (1) 2005-07-29 09:27 鐵手

    You can learn it from APPFUSE,it can be found at Java.net
      回復  更多評論    

    # l 2005-11-15 14:49 f

    ddd
      回復  更多評論    

    # re: 一種優雅的流行架構:Struts+Spring+Hibernate (1) 2005-12-23 21:05 kingbit

      回復  更多評論    

    # re: 一種優雅的流行架構:Struts+Spring+Hibernate (1) 2006-01-23 11:07 小豬

    鐵手大哥:

    你的文章不錯,但是就是缺少個例子,你個例子
      回復  更多評論    

    # re: 一種優雅的流行架構:Struts+Spring+Hibernate (1) 2006-03-11 13:18 scorpional

    感覺比較生硬和抽象!
      回復  更多評論    

    # re: 一種優雅的流行架構:Struts+Spring+Hibernate (1) 2006-07-05 19:40 agou

    我還是有一點不明白Spring+struts 是否有必要。意義是什么
      回復  更多評論    

    # re: 一種優雅的流行架構:Struts+Spring+Hibernate (1) 2006-08-27 09:20 sp

    @jony
    能否有一個完整的例子,讓我們看看
    請問那里能看到一完事的例子
      回復  更多評論    

    # re: 一種優雅的流行架構:Struts+Spring+Hibernate (1) 2006-09-10 11:04 zj

    能否有一個完整的例子,讓我們看看
      回復  更多評論    

    # re: 一種優雅的流行架構:Struts+Spring+Hibernate (1) 2006-10-09 23:48 rainy21cn

    Struts較springMVC容易掌握,所以還是有其可取之處,開發成本相對更低一些,夏昕的spring開發向導也有三者配合使用的信息,并且講的很透徹,大家可以借鑒一下
      回復  更多評論    

    # re: 一種優雅的流行架構:Struts+Spring+Hibernate (1) 2006-11-09 14:14 野草[匿名]

    我以前做了一個很簡單的例子,不是很好,給大家參考.
    http://www.15913.com/download/file/10061017/15913.com-withlib.rar
    等做出更好的例子再貼出來.
      回復  更多評論    

    # re: 一種優雅的流行架構:Struts+Spring+Hibernate (1) 2006-11-16 17:08 maomao[匿名]

    很不錯,謝謝!
      回復  更多評論    

    # re: 一種優雅的流行架構:Struts+Spring+Hibernate (1) 2007-02-10 17:38 幻想~@@~

    不錯 辛苦了
    能給個事例嗎???
      回復  更多評論    

    # re: 一種優雅的流行架構:Struts+Spring+Hibernate (1) 2007-02-10 17:39 幻想~@@~

    看到了謝謝
    學習一下。。。
      回復  更多評論    

    # re: 一種優雅的流行架構:Struts+Spring+Hibernate (1) 2007-06-29 09:47 lwie

    很不錯的,我要學習了地方多呢
      回復  更多評論    

    # re: 一種優雅的流行架構:Struts+Spring+Hibernate (1) 2007-06-30 00:18 blett

    很不錯的一篇文章......
    但還是有些地方不太明白,現在的spring框架功能越來越強大,從MVC到hibernate都包括了,而且封裝的比較完美,那么在在某種程度上來說SSH(STRUTS+SPRING+HIBERNATE)是否可以被spring一個框架可以替代呢?

    但在實際的項目中,這樣做的幾率好象很少;我們在一個web項目中如何最大限度的利用各種流行框架的優點呢?

    鐵手能否指點一下?

    thx
      回復  更多評論    

    # re: 一種優雅的流行架構:Struts+Spring+Hibernate (1)[未登錄] 2008-05-06 23:03 kk

    講得不錯,淺顯易懂,謝謝了!
      回復  更多評論    
    主站蜘蛛池模板: 中文字幕在线免费播放| 免费一级全黄少妇性色生活片| 免费国产午夜高清在线视频| 亚洲va中文字幕无码| 特级aa**毛片免费观看| 亚洲国产黄在线观看| selaoban在线视频免费精品| MM131亚洲国产美女久久| 久久免费99精品国产自在现线| 久久亚洲国产精品五月天婷| a级毛片毛片免费观看久潮| 亚洲成Av人片乱码色午夜| 四虎成人精品永久免费AV| 亚洲欧洲日产韩国在线| 国产精品成人免费一区二区| 亚洲夂夂婷婷色拍WW47| 全部免费国产潢色一级| 中文字幕不卡免费视频| 中文字幕亚洲综合久久| 一二三四影视在线看片免费 | 国产成人亚洲精品91专区手机 | 久久精品免费大片国产大片 | 亚洲va精品中文字幕| 在线免费观看a级片| 免费夜色污私人影院网站| 人人狠狠综合久久亚洲88| a拍拍男女免费看全片| 亚洲欧美日本韩国| 久久精品亚洲福利| 18级成人毛片免费观看| 亚洲爆乳成av人在线视菜奈实| 久久乐国产精品亚洲综合| 0588影视手机免费看片| 精品女同一区二区三区免费播放 | 久久w5ww成w人免费| 亚洲av无码成人影院一区| 亚洲区小说区图片区QVOD| 一个人看www在线高清免费看| 成在线人直播免费视频| 亚洲福利电影在线观看| 亚洲成av人片天堂网老年人|