首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Struts 開發指南:J2EE N 層架構對照與解耦原則

     編輯:Java 相關知識

從三層到 N 層:架構演進

傳統三層 (表示/業務/數據) 在 B/S 系統中面臨:控制邏輯混雜表示層、持久化邏輯滲透業務層。N 展架構引入控制/中介層與數據映射層,實現關注點精細分離。

主流模型層級對照表

ISA (信息系統架構)Brown 模型J2EE 標準層對應技術實現
表示層表示層客戶層瀏覽器、HTML、XSL、移動端、Applet
服務器表示層JSP、ActionForm、XML、Velocity
控制/中介層Controller控制層Struts Action、Controller Servlet、Spring MVC
領域層領域層業務層JavaBeans、Session Bean、Session Facade、POJO Service
數據映射層整合層持久層Entity Bean (BMP/CMP)、Hibernate、JDO、JDBC、iBATIS
數據源層資源層資源層RDBMS (Oracle、MySQL、DB2)、LDAP、ERP、文件系統

J2EE 核心原則:層間解耦與可替換性

「各層實現應解耦或耦合最小化,最終實現任意層實現的任意切換。」

持久層多重實現共存範例

  • 方案 A:EJB 2.x CMP (容器管理關係、事務)
  • 方案 B:Hibernate (透明持久、豐富查詢、二級緩存)
  • 方案 C:Spring JDBC Template + RowMapper (輕量、SQL 掌控)
  • 方案 D:iBATIS / MyBatis (SQL 映射、動態 SQL、存儲過程)

業務層 (Session Facade / Service) 僅依賴 DAO 接口,具體實現由 Spring IoC 容器注入,部署環境決定採用哪套持久化策略,業務代碼零修改。

Struts 在 N 層中的定位

  • 控制層:ActionServlet (前端控制器) + Action (請求處理器) + ActionForm (表單數據傳輸/校驗)。
  • 服務器表示層:JSP + Struts Taglib + Tiles/Template (佈局復用)。
  • 與業務層協作:Action 委託 BusinessDelegate 或直接調用 Service 接口,不包含業務邏輯。

常見反模式與修正

反模式症狀修正
Action 胖化Action 內含 SQL、事務、複雜業務計算抽取 Service 層,Action 僅做參數轉換、異常捕獲、導航
Form 跨層流動ActionForm 直接傳入 Service/DAOAction 組裝領域對象/DTO,Form 僅在 Web 層流轉
JSP 含業務邏輯Scriptlet 中調用 Service、查詢數據庫控制器預備數據,JSP 僅渲染,使用 EL/JSTL/Taglib
持久化技術硬編碼Service 直接 new HibernateDAO()定義 DAO 接口,Spring 注入具體實現

部署視角的層劃分

  • Web 模塊 (WAR):表示層 + 控制層 (JSP、Action、Form、Taglib、Tiles)。
  • EJB 模塊 / Service JAR:業務層 + 持久層接口 + 領域模型。
  • 持久層實現 JAR:Hibernate 映射、MyBatis XML、Entity Bean 描述符。
  • EAR:組裝上述模塊,application.xml 聲明模塊依賴與安全角色。

物理部署單元與邏輯層對齊,支援分佈式部署 (Web 服務器集群 + EJB 容器集群) 與獨立升級。

總結

N 層架構非層數越多越好,而在於識別變化維度、建立穩定接口、實現構建時/部署時/運行時的多維解耦。Struts 專注控制層,配合 Spring (業務/持久容器) 與 ORM 框架,構建經典 Java EE 應用架構基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved