Web項目架構之接口骨架設計

今天開始更新上學期項目的總結,再不更新馬上都忘了,同時也和CSDNer分享一下,和大家交流關於系統設計的方法,歡迎大家拍磚、扔磚、潑涼水。。。

1.Spring+Hibernate+Struts2架構圖

1.架構分析圖

直接上圖吧,有圖有真相很容易分析
這裏寫圖片描述


上面的架構中採用了MVC三層架構的方式,其中M:Model模型層 V:View視圖層 C:Control控制層,其中模型層有各種JavaBean來擔當,View視圖層是有JSP(Struts2標籤)充當,控制層有Struts2的Action來充當。上面是架構的角度來分的,如果用工程的思想進行實現就是Action-->Service-->DAO

2.各個實現技術分析

a.Struts2:首先解釋一下Struts2和Struts1並沒有多大的關係,Struts2是雖然是WebWork和Struts1發展過來的,但是從源碼上來看60%的核心都是從WebWork繼承過來的。Struts2的Action爲每次的請求都分配一個實例對象,因爲不會產生線程安全的問題,但是如果和Spring集成必須要注意線程安全的問題,由於Spring的IOC容器在管理POJO的時候是採取單例的,所以必須給Action設置爲prototype(scope:singleton|prototype|request|session|global session)類型。
Struts2的優勢
* 基於Filter設計的(耦合度低)
* 原生Servlet API
* 攔截器的大量使用(責任鏈模式)

b.Hibernate:負責DAO層,使用連接池來提供數據庫連接,雖然這些都是有Spring來管理,但是Hibernate在web中的地位是非常重要的。持久化層的框架其實不止Hibernate同時還有MyBatis、Toplink等等,但是隻有Hibernate和MyBatis用的比較多,如果把Hibernate比作全自動洗衣機的話那麼MyBatis就是手動洗衣機。雖然使用Hibernate比較方便不用使用一條SQL就可以進行查詢,但是在實際項目不推薦這種方式,還是需要使用原生的SQL進行操縱效率相對較高,同時手寫SQL可以優化查詢效率。

c.Spring :怎樣對Spring描述呢?其實Spring在Web開發中的位置太重要了,如果用一個比喻來說,可以這樣理解,“Spring相當於一個電飯煲,而Hibernate、Struts2、MyBatis、Spring MVC等框架相當於裏面的各種食物,全都依賴於電飯煲,大家才能喫上美味。”Spring的誕生也就是Java的春天的到來,哈哈哈。。。其實Spring爲了管理這些框架採用了很有名的IOC(Inversion of Control)控制反轉的思想,改變以往Java程序中用到什麼對象就new一個,現在使用IOC就是使這種思維發生了轉變,對象都在Spring容器中被託管了,程序需要的時候我就可以給你提供,用完了就可以進行回收,整個對象的生命週期全部都有Spring容器全程負責。我們只需要負責業務的實現,這樣極大的方便了開發。

同時Spring還使用了一個非常重要的思想AOP(Aspect Oriented Programming )面向切面思想,這是個什麼東東呢?請看下圖:
這裏寫圖片描述


圖中表示一個程序的執行流程,其中紅色方框中的方法表示程序本身要執行的業務方法,AOP可以在這個方法執行之前、之後可以切入要執行的方法,這樣可以將程序的低耦合思想發揮到機制。舉個非常簡單的案例:紅色方框相當於取錢的方法,在到ATM機取錢之前ATM機器要啓動日誌方法、安全性檢查,取錢完畢方法執行完畢後要進行拔卡操作等等,其中啓動日誌方法、安全性檢查就相當於用AOP切入的方法。AOP面向切面編程的實現原理就是動態代理,而動態代理是從靜態代理髮展過來的,弄清楚了靜態代理也就很容器的搞懂AOP是怎麼回事了,目前實現主流的代理有JDK代理和Cglib代理,其中JDK代理是基於接口的所以很有優勢擴展性比較好,而Cglib是final類型的,表現不是很好。下面的一講中會將代理模式,具體剖析AOP實現的原理。

2.基礎架構中靈活接口的設計

1.實體關係設計

設計模式中非常重要的一個原則就是開閉原則:對修改關閉對擴展開放。一個好的設計是非常難得的,需要不斷的改進和進化。下面是基於一個權限系統案例進行分析,實體關係圖如下:
這裏寫圖片描述


用戶和角色是一對多的關係,角色和權限是多對多的關係,權限和資源鏈接之間是一對多的關係。在有的系統中權限設計中只有用戶、角色和資源。這個設計多了個權限實體是因爲在大型系統中角色權限分的比較詳細,所以這樣有助於對權限的管理和操作。

2.系統接口設計
這裏寫圖片描述


上圖中展示了系統的接口設計,其中將DAO中通用的方法抽象到了CommonDAO< T >中同時採用泛型設計可以適合於多種實體,然後在抽象方法CommonDAOImpl(抽象類)中具體實現。這樣其他DAOImpl可以直接繼承CommonDAOImpl這樣就非常清晰了,以後擴展DAOImpl直接繼承通用的實現類就可以了。對於Service接口庫的設計,統一抽象到CommonService< T >中,然後讓CommonServiceImpl(抽象類)進行實現,每個ServiceImpl可以實現自己的接口同時繼承CommonServiceImpl這樣就可以實現,自由的擴展,同樣的道理將Action中的實體實例化放到了父類CommonAction進行實現,子類Action直接繼承就可以了。這種設計方法和門面模式差不多,只不過改良的太多了。

3.項目流程分析

下面講解一下具體的項目框架搭建的過程:
1.創建web項目設置項目編碼爲UTF-8
2.創建項目包結構


這裏寫圖片描述


3.編寫配置文件整合框架順序如下
Struts2–>Hibernate–>Spring
struts.xml–>web.xml–>hibernate.cfg.xml–>applicationContext.xml–>web.xml
4.編寫測試實體
5.用JUnit4編寫測試用例,看到綠條線就整合成功了

到此所有的WEB項目基礎框架搭建成功了,下一節總結一下代理模式中的靜態代理和動態代理,詮釋AOP原理的實現方式。


非常高興和大家交流學習
自由轉載,創意許可,請註明文章來源,來自這裏
(http://blog.csdn.net/unikylin)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章