SSH時(shí)代
● Struts解決接入及表示層
● Spring解決業(yè)務(wù)服務(wù)、事務(wù)處理、會(huì)話管理問題
● Hibernate解決數(shù)據(jù)存儲(chǔ)問題
SSH使用MVC分層設(shè)計(jì)
● 表示層:處理HTTP請(qǐng)求的接入層
● 業(yè)務(wù)邏輯層:核心業(yè)務(wù)邏輯的實(shí)現(xiàn)層
● 數(shù)據(jù)持久層:數(shù)據(jù)處理
流程
- 表示層的Struts MVC:用ActionServlet的方式做web層接入残黑,并把對(duì)應(yīng)的請(qǐng)求流轉(zhuǎn)到service
- 業(yè)務(wù)邏輯層的Spring:做業(yè)務(wù)邏輯處理
- 數(shù)據(jù)持久層Hibernate:生成生成對(duì)應(yīng)的DAO,即將對(duì)應(yīng)的領(lǐng)域模型轉(zhuǎn)化為數(shù)據(jù)模型
- Hibernate管理數(shù)據(jù)源和數(shù)據(jù)連接池,最后落到數(shù)據(jù)庫(kù)
- 數(shù)據(jù)處理結(jié)果返回業(yè)務(wù)邏輯層
- 業(yè)務(wù)邏輯層進(jìn)行部分封裝后返回表示層
- Struts里用JSP頁面渲染方式俗冻,再返回給HTML頁面
特點(diǎn)
● 始終圍繞模型的業(yè)務(wù)對(duì)象,該對(duì)象在核心的業(yè)務(wù)邏輯層中梢夯,其會(huì)轉(zhuǎn)為數(shù)據(jù)層的Data Object存儲(chǔ)對(duì)象言疗,最終落到數(shù)據(jù)庫(kù)。
● 不管業(yè)務(wù)邏輯如何變化颂砸,只要DAO接口不變噪奄,數(shù)據(jù)庫(kù)的表結(jié)構(gòu)的設(shè)計(jì)完全可以脫離于業(yè)務(wù)邏輯層去實(shí)現(xiàn)。
不足
● Hibernate方便了ORM(object relation database mapping)之間的轉(zhuǎn)化人乓,可以很方便的定義一個(gè)JavaBean對(duì)象就能完成數(shù)據(jù)庫(kù)模型的映射勤篮,但較難操控復(fù)雜業(yè)務(wù)對(duì)應(yīng)的SQL語句。面向?qū)ο蟮倪^度封裝導(dǎo)致一些復(fù)雜業(yè)務(wù)的數(shù)據(jù)庫(kù)操作變得很麻煩色罚。
● Hebernate對(duì)于java模型處理的狀態(tài)會(huì)跟數(shù)據(jù)庫(kù)處理狀態(tài)做綁定碰缔,也就是任何對(duì)Hibernate對(duì)象的set操作都會(huì)映射到數(shù)據(jù)庫(kù)里,這對(duì)于程序員來說就要考慮和評(píng)估get set操作對(duì)數(shù)據(jù)庫(kù)帶來的影響戳护。
● Struts表示層過于復(fù)雜金抡,每個(gè)web請(qǐng)求都要對(duì)應(yīng)一個(gè)ActionServlet類去實(shí)現(xiàn)瀑焦,并且最終還是采用JSP渲染的方式,這不符合前后端分離架構(gòu)思想梗肝。