典型的j2ee三層結構,分為表現層、中間層(業務邏輯層)和資料服務層。三層體系將業務規則、資料訪問及合法性校驗等工作放在中間層處理。客戶端不直接與資料庫互動,而是通過元件與中間層建立連線,再由中間層與資料庫互動。
表現層是傳統的jsp技術,自2023年問世以來,經過多年的發展,其廣泛的應用和穩定的表現,為其作為表現層技術打下了堅實的基礎。
中間層採用的是流行的spring+hibernate,為了將控制層與業務邏輯層分離,又細分為以下幾種。
web層,就是mvc模式裡面的「c」(controller),負責控制業務邏輯層與表現層的互動,呼叫業務邏輯層,並將業務資料返回給表現層作組織表現,該系統的mvc框架採用struts。
service層(就是業務邏輯層),負責實現業務邏輯。業務邏輯層以dao層為基礎,通過對dao元件的正面模式包裝,完成系統所要求的業務邏輯。
dao層,負責與持久化物件互動。該層封裝了資料的增、刪、查、改的操作。
po,持久化物件。通過實體關係對映工具將關係型資料庫的資料對映成物件,很方便地實現以物件導向方式運算元據庫,該系統採用hibernate作為orm框架。
spring的作用貫穿了整個中間層,將web層、service層、dao層及po無縫整合,其資料服務層用來存放資料。
乙個良好的框架可以讓開發人員減輕重新建立解決複雜問題方案的負擔和精力;它可以被擴充套件以進行內部的定製化;並且有強大的使用者社群來支援它。框架通常能很好的解決乙個問題。然而,你的應用是分層的,可能每乙個層都需要各自的框架。僅僅解決ui問題並不意味著你能夠很好的將業務邏輯和永續性邏輯和ui 元件很好的耦合。
不可否認,對於簡單的應用,採用asp或者php的開發效率比採用j2ee框架的開發效率要高。甚至有人會覺得:這種分層的結構,比一般採用jsp + servlet的系統開發效率還要低。
筆者從一下幾個角度來闡述這個問題。
— 開發效率:軟體工程是個特殊的行業,不同於傳統的工業,例如電器、建築及汽車等行業。這些行業的產品一旦開發出來,交付使用者使用後將很少需要後續的維護。但軟體行業不同,軟體產品的後期執行維護是個巨大的工程,單純從前期開發時間上考慮其開發效率是不理智的,也是不公平的。眾所周知,對於傳統的asp和 php等指令碼站點技術,將整個站點的業務邏輯和表現邏輯都混雜在asp或php頁面裡,從而導致頁面的可讀性相當差,可維護性非常低。即使需要簡單改變頁面的按鈕,也不得不開啟頁面檔案,冒著破壞系統的風險。但採用嚴格分層j2ee架構,則可完全避免這個問題。對表現層的修改即使發生錯誤,也絕對不會將錯誤擴充套件到業務邏輯層,更不會影響持久層。因此,採用j2ee分層架構,即使前期的開發效率稍微低一點,但也是值得的。
— 需求的變更:以筆者多年的開發經驗來看,很少有軟體產品的需求從一開始就完全是固定的。客戶對軟體需求,是隨著軟體開發過程的深入,不斷明晰起來的。因此,常常遇到軟體開發到一定程度時,由於客戶對軟體需求發生了變化,使得軟體的實現不得不隨之改變。當軟體實現需要改變時,是否可以盡可能多地保留軟體的部分,盡可能少地改變軟體的實現,從而滿足客戶需求的變更?答案是——採用優秀的解耦架構。這種架構就是j2ee的分層架構,在優秀的分層架構裡,控制層依賴於業務邏輯層,但絕不與任何具體的業務邏輯元件耦合,只與介面耦合;同樣,業務邏輯層依賴於dao層,也不會與任何具體的dao元件耦合,而是面向介面程式設計。採用這種方式的軟體實現,即使軟體的部分發生改變,其他部分也盡可能不要改變。
注意:即使在傳統的硬體行業,也有大量的介面規範。例如pci介面、顯示卡或者網絡卡,只要其遵守pci的規範,就可以插入主機板,與主機板通訊。至於這塊卡內部的實現,不是主機板所關心的,這也正是面向介面程式設計的好處。假如需要提高電腦的效能,需要更新顯示卡,只要更換另一塊pci介面的顯示卡,而不是將整台電腦拋棄。如果一台電腦不是採用各種介面組合在一起,而是做成整塊,那將意味著即使只需要更新網絡卡,也要放棄整台電腦。同樣,對於軟體中的乙個個元件,當乙個元件需要重構時,盡量不會影響到其他元件。實際上,這是最理想的情況,即使採用目前最優秀的架構,也會有或多或少的影響,這也是軟體工程需要努力提高的地方。
技術的更新,系統重構:軟體行業的技術更新很快,雖然軟體行業的發展不快,但小範圍的技術更新特別快。一旦由於客觀環境的變化,不得不更換技術時,如何保證系統的改變最小呢?答案還是選擇優秀的架構。
在傳統的model 1的程式結構中,只要有一點小的需求發生改變,將意味著放棄整個頁面。或者改寫。雖然前期的開發速度快,除非可以保證以後永遠不會改變應用的結構,否則不要採用model 1的結構。
採用hibernate作為持久層技術的最大的好處在於:可以完全以物件導向的方式進行系統分析、系統設計。
dao模式需要為每個dao元件編寫dao介面,同時至少提供乙個實現類,根據不同需要,可能有多個實現類。用spring容器代替dao工廠
通常情況下,引入介面就不可避免需要引入工廠來負責dao元件的生成。spring實現了兩種基本模式:單態模式和工廠模式。而使用spring可以完全避免使用工廠模式,因為spring就是個功能非常強大的工廠。因此,完全可以讓spring充當dao工廠。
優點:
struts跟tomcat、turbine等諸多apache專案一樣,是開源軟體,這是它的一大優點。使開發者能更深入的了解其內部實現機制。
除此之外,struts的優點主要集中體現在兩個方面:taglib和頁面導航。taglib是struts的標記庫,靈活動用,能大大提高開發效率。另外,就目前國內的jsp開發者而言,除了使用jsp自帶的常用標記外,很少開發自己的標記,或許struts是乙個很好的起點。
關於頁面導航,我認為那將是今後的乙個發展方向,事實上,這樣做,使系統的脈絡更加清晰。通過乙個配置檔案,即可把握整個系統各部分之間的聯絡,這對於後期的維護有著莫大的好處。尤其是當另一批開發者接手這個專案時,這種優勢體現得更加明顯。
缺點:
taglib是struts的一大優勢,但對於初學者而言,卻需要乙個持續學習的過程,甚至還會打亂你網頁編寫的習慣,但是,當你習慣了它時,你會覺得它真的很棒。
struts將mvc的controller一分為三,在獲得結構更加清晰的同時,也增加了系統的複雜度。
以上內容為**! 個人認為,為什麼我們要去學習struts,是因為我們要了解mvc思想,在別的mvc框架中,思想有啦,在學習別的mvc框架,你會很明確自己要看什麼,了解什麼! 學習ssh我在使用ssh框架的時候,也被配置檔案搞暈過,我沒有別人聰明,世界上也沒有什麼絕對的天才。ssh,讓我的分層思想,有啦進一步增強,什麼面向元件的程式設計思想,什麼面向服務的程式設計思想,什麼面向切面的程式設計思想。。。。。。。現在我們想學習什麼,如果你是初學者,請打好基礎。。。。。。。。。。。。。。。。。。。。
[url]
使用SSH框架的好處
典型的j2ee三層結構,分為表現層 中間層 業務邏輯層 和資料服務層。三層體系將業務規則 資料訪問及合法性校驗等工作放在中間層處理。客戶端不直接與資料庫互動,而是通過元件與中間層建立連線,再由中間層與資料庫互動。1 表現層是傳統的jsp技術,自1999年問世以來,經過多年的發展,其廣泛的應用和穩定的...
使用SSH框架的好處
典型的j2ee三層結構,分為表現層 中間層 業務邏輯層 和資料服務層。三層體系將業務規則 資料訪問及合法性校驗等工作放在中間層處理。客戶端不直接與資料庫互動,而是通過元件與中間層建立連線,再由中間層與資料庫互動。表現層是傳統的jsp技術,自1999年問世以來,經過多年的發展,其廣泛的應用和穩定的表現...
使用SSH框架的好處
典型的j2ee三層結構,分為表現層 中間層 業務邏輯層 和資料服務層。三層體系將業務規則 資料訪問及合法性校驗等工作放在中間層處理。客戶端不直接與資料庫互動,而是通過元件與中間層建立連線,再由中間層與資料庫互動。表現層是傳統的jsp技術,自1999年問世以來,經過多年的發展,其廣泛的應用和穩定的表現...