原文: struts+spring+hibernate 組裝web應用 用spring、Hibernate、Struts組建輕量級架構
這兒是一些經常用Struts編寫的但是卻不應該和Struts表現層相伴的項目:
直接和數據庫通訊,比如JDBC調用; 業務邏輯和與你的應用程序相關的驗證; 事務管理;
在表現層中引入這種代碼將導致典型耦合(type coupling)和討厭的維護。
這篇文章的后面將用例子來把Spring使用這些概念的方法說得更清楚一些。業務層應該負責下面這些事情:
處理應用程序的業務邏輯和業務驗證; 管理事務; 預留和其它層交互的接口; 管理業務層對象之間的依賴; 增加在表現層和持久層之間的靈活性,使它們互不直接通訊; 從表現層中提供一個上下文(context)給業務層獲得業務服務(business services ); 管理從業務邏輯到持久層的實現。
在典型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代替而不會修改在其它任何層的代碼。