官术网_书友最值得收藏!

第0章 Java Web開發總覽

在閱讀本書之前,請各位讀者務必先閱讀本章的內容。本章主要描述項目開發的流程、如何進行架構設計、如何設計包結構等內容,這些內容是本書編寫的基礎。通過對本章節的閱讀,讀者可以了解本書各章節安排的基本指導思想,本書精選案例的設計思路。

1. 軟件開發的整體流程

目前比較常見的軟件開發流程有:瀑布開發、RUP(統一過程)、敏捷開發等,其中RUP的框架圖如圖0.1所示。

圖0.1 RUP的框架圖

一般來講,一個項目的開發流程主要包括項目啟動、需求調研、設計開發、測試、部署、項目總結和運行維護,在此過程中還伴隨著項目管理、配置管理、質量保證等過程。這些階段的含義如下:

● 項目啟動是指《項目愿景和范圍》和《項目執行計劃書》評審通過后,即由項目經理告知配置管理人員分別在相應的管理工具中建立該項目和相關目錄,并對項目組成員進行相應授權。

● 需求調研是指在獲取需求過程中,需求人員需要編寫軟件需求規格說明書并建立需求跟蹤矩陣。

● 設計開發是指開發經理將任務分配給設計開發人員,設計開發人員在工具中將分配的任務狀態改為處理中;在設計過程中,設計人員將設計過程中產生的文檔存放在工具的相應目錄中,編碼人員每天將代碼上傳至代碼管理工具;完成某項分配任務的功能后,根據版本號對領域打標簽,然后在管理工具中修改分配內容狀態為已解決,并將標簽名和打標簽的位置記錄在所分配內容的備注中。

● 測試是指測試人員編寫測試用例、測試計劃,并對開發人員提交的代碼進行測試,全部測試完畢后,提供最終全部測試通過的標簽給部署人員。

● 部署是指部署人員根據測試人員提供的標簽,將程序部署至培訓機,并發送郵件通知項目經理;項目經理組織相關人員進行培訓,培訓沒有發現問題,則通知部署人員,部署人員修改分配內容為已發布,然后部署人員根據版本發布日期按計劃將程序部署至正式機,并通知項目經理。

一個比較實用的軟件開發的整體流程圖如圖0.2所示。

圖0.2 一個比較實用的軟件開發的整體流程圖

本書后面的所有精選案例都是按照這樣的軟件開發流程來實現的。

2. 架構設計的核心思想

在介紹架構設計的相關知識前,先澄清兩個概念:

● 模式,即pattern。其實就是解決某一類問題的方法論。把解決某類問題的方法總結歸納到理論高度,那就是模式。

● 框架,即framework。其實就是某種應用的半成品,開發人員可以在此基礎上擴充完善,從而開發出軟件來。

為什么要用模式?因為模式是一種指導,在一個良好的指導下,有助于開發人員完成任務,做出一個優良的設計方案,達到事半功倍的效果;而且會得到解決問題的最佳辦法。

為什么要用框架?因為軟件系統發展到今天已經很復雜了,特別是服務器端軟件,涉及的知識、內容、問題太多。在某些方面使用別人的成熟框架,就相當于讓別人幫自己完成一些基礎工作,而開發人員只需要集中精力完成系統的業務邏輯設計即可。而且框架一般是成熟、穩健的,它可以處理系統的很多細節問題,比如,事務處理、安全性、數據流控制等問題。還有,框架一般都經過很多人使用,所以結構很好,擴展性也很好,而且它是不斷升級的,開發人員可以直接享受別人升級代碼帶來的好處。

在軟件開發過程中,有一個重要的環節就是軟件架構設計,經過這么多年的發展,在Java Web開發方面最為經典的設計思想就是MVC模式,MVC的英文全稱是Model-View-Controller,中文的意思是“模式-視圖-控制器”。MVC的處理過程:首先用戶通過視圖層發出請求;接著控制器接收用戶的請求,并決定應該調用哪個模型來進行處理;然后模型調用業務邏輯來處理用戶的請求并返回數據;最后控制器將處理后的數據傳遞給視圖層,并通過視圖層展現給用戶。MVC模式的功能示意圖如圖0.3所示。

圖0.3 MVC模式的功能示意圖

MVC設計模式的理念雖然很好,但技術實現起來卻很困難,這主要是由HTML的實現所決定的,這種基于請求/響應的實現方式,很難做到如果有變化能夠及時通知。當J2EE的JSP Model 2規范出來以后,才有了實現MVC的設計模式的可能。它用JSP技術實現視圖的功能,用Servlet技術實現控制器的功能,用JavaBean技術實現模型的功能。Sun公司共制定了兩種JSP的規范,分別是Model 1和Model 2規范。

Model 1的架構圖如圖0.4所示。

圖0.4 Model 1的架構圖

本書第16章“注冊管理系統”就是采用Model 1的架構實現的。

Model 2表示的是基于MVC模式的框架,通過這種設計模型把應用邏輯、處理過程和顯示邏輯分成不同的組件實現。這些組件可以進行交互和重用,從而彌補了Model 1的不足。

Model 2的架構圖如圖0.5所示。

圖0.5 Model 2的架構圖

本書第17章“新聞發布系統”就是采用Model 2的架構實現的。MVC本身就是一個非常復雜的系統,所以采用MVC實現Web應用時,最好選擇一個現成的MVC框架,在此之上進行開發,從而取得事半功倍的效果。現在有很多可供使用的MVC框架,在進行MVC框架選擇時,主要考慮View層、Controller層、Model層和持久層的技術實現。

在View層,目前有很多實現技術,比如最基本的JSP、Velocity、FreeMarker、SiteMesh、JSF 2等,其實每種技術都有自己的一個適用范圍,Velocity和FreeMarker是模板引擎,SiteMesh用來做頁面裝飾、布局,最常用的應該是JSP技術了。

在Controller層和Model層,Struts 2和Spring 3是最常用的開源框架,其中Struts 2與View層的各種技術結合得比較好,Spring 3更多的是用在IoC(依賴注入)方面,而且在持久層的整合方面,Spring 3提供了很好的支持。

在持久層,目前的主流是Hibernate 3,除此之外還有iBATIS、TopLinkJPA、OpenJPA等,如果想自己更多地編寫SQL語句,則可以使用iBATIS;如果想徹底地面向對象的持久層設計,則可以使用Hibernate 3。

綜上所述,目前最流行的框架組合是Struts 2+Spring 3+Hibernate 3。在本書精選的案例中,筆者分別采用了DWR、JSON、JSF 2、Struts 2、Spring 3、Hibernate 3、TopLinkJPA、OpenJPA等不同的組合來實現一些系統的開發,通過這些組合的學習,希望讀者對上述技術有更深入的認識。采用Ajax是為了更好地擁有用戶體驗;采用JSF是為了更好地分離視圖層和模型層,采用JPA是為了更好地設計持久層,但并不是說所有的系統都需要采用這些技術。

比如,對于登錄來說,采用Ajax來進行驗證能夠更方便用戶體驗;但對于一些正常的應用來說,采用Ajax就顯得有些多余了,不但增加了開發的復雜程度,而且也沒有提高用戶體驗,因此完全沒有必要采用Ajax技術。

對于JSF 2來說,它本身就實現了MVC的思想,而Struts 2也實現了MVC的思想,因此兩者其實有部分內容是重合的,也完全沒有必要采用JSF 2和Struts 2的整合,即要么單獨使用JSF,要么單獨使用Struts 2。

3. 包結構的設計

J2EE的項目看起來很復雜,讓初學者不知所措。下面以一個案例為例,講解各個開發包的功能。從圖0.6可以看出,包結構的設計如下。

● com.系統名.action:用來存放控制器類。

● com.系統名.domain:用來存放實體類。

● com.系統名.service:用來存放業務邏輯接口類。

● com.系統名.service.impl:用來存放業務邏輯實體類。

● com.系統名.dao:用來存放DAO接口類。

● com.系統名.dao.impl:用來存放DAO的實體類。

所有的JSP頁面存放在JSP文件夾下,其中以網上考試系統為例來說明包結構,如圖0.6所示。

圖0.6 網上考試系統的包結構

對于類及其變量、方法的命名網上有很多參考資料,這里不再詳述,只是簡單地介紹一下命名規則:

● 使用可以正確地形容變量/領域/類(variable/field/class)的完整的英文描述單詞。例如accountDao、mailSender、orderService等。雖然像x1、y1、z1、fn很容易使用,因為很短,如果把寫程序當成像打字一樣,這樣的命名真的很省事,但卻造成代碼很難被了解、維護和新增功能。

● 使用應用在領域模型上的術語。如果使用者把客戶稱為customer,那么就用Customer為class命名,而非Client。

● 使用混合詞讓名字更容易讀懂。把數個有意義的單詞連在一起命名,一般都是小寫,但class與interface的第一個字母與其他非第一個組合單詞的首字母要大寫。

● 雖然命名要有意義,但也不要太長,盡量控制在15個字母以下,不過,這是在不會犧牲可讀性的最高指導原則下實施的。

● 對標準的首字母縮略字(standard acronyms)首字母大寫。例如,SQL這個英文單詞定義為變量時命名成sqlDatabase,或者定義為類時命名成SqlDatabase,比sQLDatabase和SQLDatabase更容易被讀懂。

主站蜘蛛池模板: 苏州市| 盐池县| 合山市| 纳雍县| 柯坪县| 林芝县| 个旧市| 永修县| 全椒县| 陵水| 隆昌县| 读书| 大姚县| 横峰县| 肃宁县| 广州市| 平陆县| 慈溪市| 久治县| 喀喇沁旗| 安塞县| 镇江市| 宾川县| 正镶白旗| 金川县| 正蓝旗| 环江| 莆田市| 上思县| 富平县| 眉山市| 贵阳市| 黔西| 阿巴嘎旗| 关岭| 都兰县| 罗城| 静宁县| 同德县| 错那县| 达尔|