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

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

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

    隨筆-7  評論-24  文章-102  trackbacks-0

    原文: 
    struts+spring+hibernate 組裝web應用
    用spring、Hibernate、Struts組建輕量級架構



    應用程序的分層 (Application Layering)/  SSH       大多數不復雜的web應用都能被分成至少4個各負其責的層次。這些層次是:表現層(presentation)、持久層(persistence)、業務層(business)、領域模型層(domain model)。每層在應用程序中都有明確的責任,不應該和其它層混淆功能。每一應用層應該彼此獨立但要給他們之間放一個通訊接口。讓我們從審視各個層開始,討論這些層應該提供什么和不應該提供什么。

     
    為什么采用這樣的四層架構?


    表現層 (The Presentation Layer) / Struts   在一個典型的web應用的一端是表現層。很多Java開發者也理解Struts所提供的。然而,太常見的是,他們把像業務邏輯之類的耦合的代碼放進了一個org.apache.struts.Action。所以,讓我們在像Struts這樣一個框架應該提供什么上取得一致意見。這兒是Struts負責的:  

         為用戶管理請求和響應;  
         提供一個控制器(controller)代理調用業務邏輯和其它上層處理; 
         處理從其它層擲出給一個Struts Action的異常; 
         為顯示提供一個模型;
         執行用戶接口(UI)驗證。


    這兒是一些經常用Struts編寫的但是卻不應該和Struts表現層相伴的項目:

         直接和數據庫通訊,比如JDBC調用; 
         業務邏輯和與你的應用程序相關的驗證; 
         事務管理;

    在表現層中引入這種代碼將導致典型耦合(type coupling)和討厭的維護。

    為什么使用Struts?


    業務層(The Business Layer) / Spring       在一個典型的web應用程序的中間的組件是業務層或服務層。從編碼的視角來看,這個服務層是最容易被忽視的一層。不難在用戶接口(UI)層或者持久層里找到散布在其中的這種類型的代碼。這不是正確的地方,因為這導致了應用程序的緊耦合,這樣一來,隨著時間推移代碼將很難維護。幸好,針對這一問題有好幾種Frameworks存在。在這個領域兩個最流行的框架是Spring和PicoContainer,它們叫作微容器(microcontainers),你可以不費力不費神的把你的對象連在一起。所有這些框架都工作在一個簡單的叫作“依賴注入”(dependency injection)(也通稱“控制反轉”(inversion of control))的概念上。這篇文章將著眼于Spring的為指定的配置參數通過bean屬性的setter注入(setter injection)的使用。Spring也提供了一個構建器注入(constructor injection)的復雜形式作為setter注入的一個替代。對象們被一個簡單的XML文件連在一起,這個XML文件含有到像事務管理器(transaction management handler)、對象工廠(object factories)、包含業務邏輯的服務對象(service objects)、和數據存取對象(DAO)這些對象的引用(references)。
     

    這篇文章的后面將用例子來把Spring使用這些概念的方法說得更清楚一些。業務層應該負責下面這些事情:

        處理應用程序的業務邏輯和業務驗證;
        管理事務;
        預留和其它層交互的接口;
        管理業務層對象之間的依賴;
        增加在表現層和持久層之間的靈活性,使它們互不直接通訊;
        從表現層中提供一個上下文(context)給業務層獲得業務服務(business services );
        管理從業務邏輯到持久層的實現。

    為什么使用Spring ?


    持久層 (The Persistence Layer ) / Hibernate

            在典型web應用的另一端是持久層。這通常是使事情迅速失控的地方。開發者低估了構建他們自己的持久層框架的挑戰性。一般來說,機構內部自己寫的持久層不僅需要大量的開發時間,而且還經常缺少功能和變得難以控制。有幾個開源的“對象-關系映射”(ORM)框架非常解決問題。尤其是,Hibernate框架為java提供了"對象-關系持久化"(object-to-relational persistence)機制和查詢服務。Hibernate對那些已經熟悉了SQL和JDBC API的Java開發者有一個適中的學習曲線。Hibernate持久對象是基于簡單舊式Java對象(POJO)和Java集合(Java collections)。此外,使用Hibernate并不妨礙你正在使用的IDE。下面的列表包含了你該寫在一個持久層框架里的代碼類型:

            查詢相關的信息成為對象。Hibernate通過一種叫作HQL的面向對象(OO)的查詢語言或者使用條件表達式API(expressive criteria API)來做這個事情。 HQL非常類似于SQL-- 只是把SQL里的table和columns用Object和它的fields代替。有一些新的專用的HQL語言成分要學;不過,它們容易理解而且文檔做得好。HQL是一種使用來查詢對象的自然語言,花很小的代價就能學習它。

            保存、更新、刪除儲存在數據庫中的信息。

            像Hibernate這樣的高級“對象-關系”映射(object-to-relational mapping)框架提供對大多數主流SQL數據庫的支持,它們支持“父/子”(parent/child)關系、事務處理、繼承和多態。


    這兒是一些應該在持久層里被避免的項目:

        業務邏輯應該在你的應用的一個高一些的層次里。持久層里僅僅允許數據存取操作。

        你不應該把持久層邏輯(persistence logic)和你的表現層邏輯(presentation logic)攪在一起。避免像JSPs或基于servlet的類這些表現層組件里的邏輯和數據存取直接通訊。通過把持久層邏輯隔離進它自己的層,應用程序變得易于修改而不會影響在其它層的代碼。例如:Hebernate能夠被其它持久層框架或者API代替而不會修改在其它任何層的代碼。

    為什么使用Hibernate ?


    領域模型層 (The Domain Model Layer )         最后,因為我們討論的是一個不是很復雜的、基于web的應用程序,我們需要一組能在不同的層之間移動的對象。領域對象層由那些代表現實世界中的業務對象的對象們組成,比如:一份訂單(Order)、訂單項(OrderLineItem)、產品(Product)等等。這個層讓開發者停止建立和維護不必要的數據傳輸對象(或者叫作DTOs),來匹配他們的領域對象。例如,Hibernate允許你把數據庫信息讀進領域對象(domain objects)的一個對象圖,這樣你可以在連接斷開的情況下把這些數據顯示到UI層。那些對象也能被更新和送回到持久層并在數據庫里更新。而且,你不必把對象轉化成DTOs,因為DTOs在不同的應用層間移動,可能在轉換中丟失。這個模型使得Java開發者自然地以一種面向對象的風格和對象打交道,沒有附加的編碼。
    posted on 2008-09-04 16:45 黃小二 閱讀(621) 評論(1)  編輯  收藏 所屬分類: J2EE

    評論:
    # re: SSH 組建輕量級架構 2011-06-23 09:55 | 林風琦
    寫的非常好  回復  更多評論
      
    主站蜘蛛池模板: 18禁亚洲深夜福利人口| 成人区精品一区二区不卡亚洲| 美女裸免费观看网站| 最新中文字幕免费视频| 亚洲一区二区三区乱码在线欧洲| 999国内精品永久免费观看| 亚洲欧洲在线播放| 美女被免费喷白浆视频| 亚洲国产最大av| 成在线人永久免费视频播放| 中文字幕无码精品亚洲资源网久久| 国产免费av片在线看| 亚洲av成人无码网站…| 免费国产成人午夜私人影视| 日韩精品视频在线观看免费| 久久久久亚洲av毛片大| 日韩视频免费在线观看| 亚洲视频在线观看地址| 免费观看成人毛片a片2008| 亚洲精品色播一区二区 | 亚洲精品456人成在线| 热久久精品免费视频| 人与动性xxxxx免费| 亚洲午夜视频在线观看| av免费不卡国产观看| 亚洲精华液一二三产区| 亚洲中文字幕无码专区| 99精品一区二区免费视频| 日本亚洲精品色婷婷在线影院| 日本免费高清一本视频| 一个人看的www在线免费视频| 亚洲AV日韩精品久久久久久 | 一级毛片免费观看不收费| 久久精品国产亚洲AV麻豆王友容 | 亚洲熟妇无码一区二区三区| 又粗又硬免费毛片| 99热在线精品免费播放6| 亚洲人成网亚洲欧洲无码| 国产亚洲精品久久久久秋霞| 91大神在线免费观看| 色屁屁www影院免费观看视频|