1. 程式人生 > >web框架表現層,業務層,持久層的特點

web框架表現層,業務層,持久層的特點

    為了實現web層(struts)和持久層(Hibernate)之間的鬆散耦合,我們採用業務代表(Business Delegate)和DAO(Data Access Object)兩種模式。DAO模式為了減少業務邏輯和資料訪問邏輯之間的耦合,當一個持久曾框架被應用時,該模式將會減少業務物件和該框架之間的耦合,這樣我們可以不修改業務物件而選擇不同的持久層框架的實現。實際上在DAO模式中包含兩種結構模式:橋(Bridge)模式和介面卡(Adaptor)模式。對錶現層,我們使用 Struts ;業務層使用 Spring ;對於持久層我們使用的是 Hibernate 。你儘可以取代這裡的某個框架而使用你喜歡的框架已達到同樣的效果。下圖顯示了框架被整合起來時,從最高層次看到的檢視。

 


應用層 許多設計良好的web應用,可以被按職責分為四層。這些層次是表現層、持久層、業務層、和領域模型層。每一個層次都有其獨特的職責,不能把各自的功能與其它層次相混合。每一個應用層都應該和其它層隔離開來,但允許使用介面在層間進行通訊。我們開始來看看每個層,並討論一下它們各自都應該提供什麼和不應該提供什麼。 表現層 一個典型的web 應用的末端是表現層。許多Java 開發者都知道Struts提供了什麼東西。然而,太多時候,耦合程式碼比如業務邏輯被放進org.apache.struts.Action中。所以,我們先總結一下Struts之類的框架應該提供什麼。下面就是Struts 的職責所在: 1.管理使用者的請求和響應 2.提供一個控制起來將呼叫委託到業務邏輯和其他上游處理 3.將來自於丟擲例外的其他層的例外處理到Struts Action 中 4.組裝可以在檢視中表現的模型物件 5.執行UI 校驗 下面是一些經常可以使用Struts進行編碼但是不應該和表現層關聯的事情: 1.直接和資料庫互動,比如JDBC 呼叫 2.與應用相關的業務邏輯和校驗 3.事務管理 在表現層中引入這些型別的程式碼將導致型別耦合和維護負擔。 持久層 一個典型Web應用的另一端是持久層。這也是應用中最容易很快失控的地方。開發者通常低估了自己構建自己的持久層框架的挑戰。一個定製的,內部開發的持久層不僅需要大量的開發時間,並且通常缺乏功能和難以管理。目前有許多解決這些問題的開源物件關係對映 (ORM) 框架。特別地,Hibernate 框架就允許Java中的物件-關係的永續性和查詢服務。Hibernate 對已經熟悉了SQL 和JDBC API的Java開發者來或具有中度的學習曲線。Hibernate 的持久物件基於POJO和Java群集(collections)。此外,使用Hibernate 不和你的IDE介面。下面列出了你需要在永續性框架中編寫的程式碼型別: 1.查詢關係資訊到物件中。Hibernate是通過稱為HQL的OO查詢語言,或者使用更有表現能力的規則 API,來完成這個工作的。除了使用物件而不是表,使用欄位而不是列的方式,HQL非常類似於 SQL。也有一些新的特定的HQL 語言特徵需要學習;但是,它們是很容易理解和良好編寫的。HQL是一種用於查詢物件的自然語言,而物件,只需要很少的學習曲線吧。. 2.儲存、更新和刪除儲存在資料庫中的資訊 3.高階的物件關係對映框架比如Hibernate支援大部分主流SQL資料庫,它們支援父/子關係,事務,繼承和多型。 下面是應該在持久層避免的一些事情: 1.業務邏輯應該置於應用的更高層中。這裡只允許資料訪問方法。 2.不應該使持久邏輯和表現邏輯耦合。避免表現元件如JSP或者基於servlet的類中的邏輯直接和資料訪問進行通訊。通過將永續性邏輯隔離在其自己的層中,應用將具有更加靈活的修改性而不影響到其他層的程式碼。例如, Hibernate可以使用其他持久框架和API代替,而不需要修改其它層中的程式碼。 業務層應該負責下面的問題: 1.處理應用的業務邏輯和業務校驗 2.管理事務 3.允許與其他層進行互動的介面 4.管理業務級物件之間的依賴性 5.加入了表現和持久層之間的靈活性,以便它們不需要彼此進行直接通訊 6.從表現層暴露上下文給業務層以獲得業務服務 7.管理從業務層到表現層的實現