技術交流

淺論 SSH 架構

戴培德 戴培德
Tags:JavaSSHMVCDIIoCBeanFactorySSI

在一次的聚會當中跟許久不見的同學在討論一件事情:雖然大家都是本科系出身(資工系畢業),但同班好友真正從事資訊行業的其實很少,可能知道學海無崖,莫再沉淪下去吧!像我還在資訊行業打滾的已是少數中的少數,閒聊當中也知道我在 Java 的領域當中有所涉略,也因此打開了話題。

SSH 架構

當然,同學們就直接切入正題的問:什麼是 SSH 的架構?想當然爾,我就開始說明了所謂的 SSH 架構:S (Struts) + S (Spring) + H (Hibernate)

這些是一組框架的組合,也是目前最為流行的 Java Web 開發架構。每個框架都各司其職,也都有其主要目的。而資通的 Java 相關案子也都是採用這樣的架構做開發。

Struts 主要在是作為 MVC(Model-Viewer-Controller)的實現,將頁面的呈現及流程與商業邏輯切分。然而,與其說切分不如解釋為降低每個環節的藕合性。同時做了開發分工,網頁設計著重在UI/UX的設計,商業邏輯交給後端 Business Layer 去負責,在降低每個環節的藕合性的同時,也將每一階層都做了很完整的定義。前端使用 HTML 或 Tag 與相對也減低的前端頁面暴露在外的資安問題諸如 SQL injection、Cross-site Script,由工程師設計出來的頁面也不會每次都被使用者嫌棄美感不足了。

Spring 延續了 MVC 架構中的 Model 部分,幾個主要特色,依賴注入(DI)、反轉控制(IoC)和 AOP(Aspect Oriented Programming)。IoC 這裡的基礎概念是 BeanFactory,它提供對 Factory 模式的經典實現來消除對程序性單例模式(Singleton)的需要,並真正地允許你從程序邏輯中分離出依賴關係和配置。當然若能配合其他 Design Pattern 使用更可看出架構的完整性,AOP 中應用到的是資料庫的 Transaction 控管,它讓開發者可以完全不需要去寫到 Transaction 相關的 code,只要定義好哪些 code 需要加上 Transaction 的控制即可。

Hibernate ORM (Oriented-Relational Mapping)提供了常用的「對象/關係」映射 APIs 的集成層。 其中包括 JPA、JDO、iBatis 和 Hibernate 。利用 ORM package,可以混合使用所有 Spring 提供的特性進行「對象/關係」映射。

架構

當然以上所說也都只是廣大的 Java 架構的一部分,諸如 Spring MVC + Spring + Hibernate 也都是最常被使用的,或是 SSI(Struts + Spring + iBatis)。Java 技術很多,但都是為了提供給開發人員更好開發或更好維護的作法。這就好像魔術師一般,戲法人人會變,各有巧妙,就看我們能了解多少,懂得多少。若能善用這些 Framework 想必也會讓自己事半功倍,這也是我們 Java 工程師的基本技能!