核心定義辨析
| 維度 | Pattern(模式) | Framework(框架) |
| 本質 | 解決特定問題的方法論/最佳實踐 | 半成品應用骨架,可執行、可擴展的代碼庫 |
| 形式 | 概念、圖解、代碼範本 | 具體的 JAR、類別、配置檔、啟動入口 |
| 控制權 | 開發者主動套用 | 控制反轉:框架呼叫開發者代碼 |
| 層級 | 設計層面 | 實作層面,通常位於「平台(J2EE)與業務邏輯之間」 |
| 例子 | MVC、Singleton、Factory | Spring、Struts、Hibernate、WAF |
為什麼需要模式?
- 避免重複造輪子,站在巨人肩膀上解決經典問題
- 建立團隊共同語彙,「用 Strategy 模式」比「寫一堆 if-else 然後用介面包起來」溝通效率高百倍
- 引導良好設計:高內聚、低耦合、單一職責、開放封閉
為什麼需要框架?
- 企業級系統複雜度爆炸:事務、安全、連接池、ORM、MVC、AOP、分布式追蹤……
- 框架幫你把「管道工程」鋪好,你專注「業務水流」
- 成熟框架經過大規模生產驗證,坑已被踩平,升級即享受紅利
軟體分層架構與框架定位
┌─────────────────────────────────────┐
│ Presentation Layer │ ← Struts, Spring MVC, JSF, Vaadin
│ (Web UI, REST API, Mobile SDK) │
├─────────────────────────────────────┤
│ Business Logic Layer │ ← Spring Service, EJB, CDI
│ (Transaction, Security, Rules) │
├─────────────────────────────────────┤
│ Persistence / Data Layer │ ← Hibernate, MyBatis, JPA, Spring Data
│ (ORM, Cache, Repository, DAO) │
├─────────────────────────────────────┤
│ Integration Layer │ ← Spring Integration, Camel, Kafka Client
│ (Messaging, ESB, External API) │
├─────────────────────────────────────┤
│ Platform / Runtime │ ← JVM, App Server, K8s, Docker
│ (J2EE, Spring Boot, MicroProfile) │
└─────────────────────────────────────┘
框架通常橫跨「業務邏輯」與「持久/整合」層,提供橫切關注點(事務、日誌、監控)支援。
主流 Java 框架全景圖(按層分類)
Web/展現層
| 框架 | 核心技術 | 特色 | 狀態 |
| Spring MVC / Spring Boot | Servlet, Annotation, Embedded Tomcat | 事實標準、生態最豐富、自動配置 | 🟢 主流 |
| Struts 2 | Filter, OGNL, Interceptor | 老牌 MVC、動作導向、漏洞較多 | 🟡 維護 |
| JSF (Jakarta Faces) | Component-based, Facelets | 標準規範、組件豐富、學習曲線陡 | 🟡 企業級 |
| Vaadin / Flow | Server-side UI, WebSocket | 純 Java 寫前端、類 Swing 體驗 | 🟢 成長中 |
| Play Framework | Async, Reactive, Akka | 高併發、Scala/Java 雙語、無 Servlet | 🟢 反應式 |
業務/依賴注入層
- Spring Framework / Spring Boot:IoC、AOP、事務、事件、任務排程、全家桶生態
- Google Guice:輕量級 DI、模組化、編譯時驗證
- CDI (Weld/OpenWebBeans):Jakarta EE 標準、類型安全、攔截器、事件總線
持久層
| 框架 | 類型 | 特色 |
| Hibernate / JPA | ORM | 物件關係映射、緩存、延遲載入、JPQL/Criteria |
| MyBatis / MyBatis-Plus | SQL Mapping | 手寫 SQL 完全控制、動態 SQL、分頁、代碼生成 |
| Spring Data JPA | Repository 抽象 | 接口即實現、Query Methods、Specs、Audit |
| jOOQ | Type-safe SQL | 編譯時 SQL 驗證、DSL、複雜查詢利器 |
微服務/雲原生
- Spring Cloud (Netflix OSS 衍生)、Spring Cloud Alibaba (Nacos、Sentinel、Seata)
- MicroProfile 實作:Quarkus、Helidon、OpenLiberty
- Service Mesh:Istio、Linkerd (Sidecar 模式,語言無關)
經典組合:WAF + Struts → 現代 Spring Boot 全家桶
舊時代 (Sun PetStore WAF + Struts):
JSP(TagLib) → ActionForm → Action → Event → EJBAction → EJB → DAO → DB
現代 Spring Boot:
Controller (@RestController) → Service (@Transactional) → Repository (JPA/MyBatis) → DB
↑ ↑ ↑
Spring MVC Spring AOP Spring Data
(參數綁定/驗證) (事務/快取/鎖) (CRUD/分頁/規格)
優勢:零 XML、內嵌容器、啟動極快、測試友善、雲原生就緒
方法論補充:RUP、XP、Scrum、DevOps
這些屬於「過程方法」,而非設計模式或框架。RUP 重文檔與迭代,XP 重工程實踐,Scrum 重敏捷流程,DevOps 重自動化交付。框架解決「如何建」,方法論解決「如何管」。
選型決策矩陣
| 場景 | 推薦棧 | 理由 |
| 企業級單體/微服務新專案 | Spring Boot 3 + Spring Cloud Alibaba | 生態完整、人才易招、長期支援 |
| 高併發、反應式、雲原生 | Spring WebFlux / Quarkus / Vert.x | 非阻塞、原生 GraalVM、啟動毫秒級 |
| 傳統 JSP/Struts 維護遷移 | Spring Boot + Thymeleaf / Vue/React 前後端分離 | 漸進式遷移、風險可控 |
| 極簡 REST API / Serverless | Micronaut / Helidon / AWS Lambda Java | 編譯時 DI、無反射、冷啟動快 |
沒有銀彈,只有最適合當前團隊能力、業務階段、運維成熟度的選擇。先掌握核心原理,再擁抱框架紅利。
- 上一篇文章: Java 程式設計思維:面向物件邏輯思維方法論
- 下一篇文章: GNOME 2.23.2 開發版發布:自由桌面環境的新里程碑
Copyright ©
程式碼之家 All Rights Reserved