現在軟件設計里到處都是模式,框架。有次朋友問(wèn)什么是模式?我也在學(xué)習中,就我的學(xué)習經(jīng)驗,給出以下小結。(注意:個(gè)人觀(guān)點(diǎn),僅供參考,歡迎指正。)
1.什么是模式?
模式,即pattern。其實(shí)就是解決某一類(lèi)問(wèn)題的方法論。你把解決某類(lèi)問(wèn)題的方法總結歸納到理論高度,那就是模式。
Alexander給出的經(jīng)典定義是:每個(gè)模式都描述了一個(gè)在我們的環(huán)境中不斷出現的問(wèn)題,然后描述了該問(wèn)題的解決方案的核心。通過(guò)這種方式,你可以無(wú)數次地使用那些已有的解決方案,無(wú)需在重復相同的工作。
模式有不同的領(lǐng)域,建筑領(lǐng)域有建筑模式,軟件設計領(lǐng)域也有設計模式。當一個(gè)領(lǐng)域逐漸成熟的時(shí)候,自然會(huì )出現很多模式。
什么是框架?
框架,即framework。其實(shí)就是某種應用的半成品,就是一組組件,供你選用完成你自己的系統。簡(jiǎn)單說(shuō)就是使用別人搭好的舞臺,你來(lái)做表演。而且,框架一般是成熟的,不斷升級的軟件。
2.為什么要用模式?
因為模式是一種指導,在一個(gè)良好的指導下,有助于你完成任務(wù),有助于你作出一個(gè)優(yōu)良的設計方案,達到事半功倍的效果。而且會(huì )得到解決問(wèn)題的最佳辦法。
為什么要用框架?
因為軟件系統發(fā)展到今天已經(jīng)很復雜了,特別是服務(wù)器端軟件,設計到的知識,內容,問(wèn)題太多。在某些方面使用別人成熟的框架,就相當于讓別人幫你完成一些基礎工作,你只需要集中精力完成系統的業(yè)務(wù)邏輯設計。而且框架一般是成熟,穩健的,他可以處理系統很多細節問(wèn)題,比如,事物處理,安全性,數據流控制等問(wèn)題。還有框架一般都經(jīng)過(guò)很多人使用,所以結構很好,所以擴展性也很好,而且它是不斷升級的,你可以直接享受別人升級代碼帶來(lái)的好處。
框架一般處在低層應用平臺(如J2EE)和高層業(yè)務(wù)邏輯之間的中間層。
軟件為什么要分層?
為了實(shí)現“高內聚、低耦合”。把問(wèn)題劃分開(kāi)來(lái)各個(gè)解決,易于控制,易于延展,易于分配資源…總之好處很多啦:)。
3. 以下所述主要是JAVA,J2EE方面的模式和框架:
常見(jiàn)的設計模式有什么?
首先,你要了解的是GOF的《設計模式--可復用面向對象軟件的基礎》一書(shū)(這個(gè)可以說(shuō)是程序員必備的了),注意:GOF不是一個(gè)人,而是指四個(gè)人。它的原意是Gangs Of Four,就是“四人幫”,就是指此書(shū)的四個(gè)作者:Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides。這本書(shū)講了23種主要的模式,包括:抽象工廠(chǎng)、適配器、外觀(guān)模式等。
還有其他的很多模式,估計有100多種。
軟件設計模式太多,就我的理解簡(jiǎn)單說(shuō)一下最常見(jiàn)的MVC模式。
MVC模式是1996年由Buschmann提出的:
模型(Model):就是封裝數據和所有基于對這些數據的操作。
視圖(View):就是封裝的是對數據顯示,即用戶(hù)界面。
控制器(Control):就是封裝外界作用于模型的操作和對數據流向的控制等。
另外:
RUP(Rational Unified Process)軟件統一過(guò)程,XP(Extreme Programming)極端編程,這些通常被叫做“過(guò)程方法”,是一種軟件項目實(shí)施過(guò)程的方法論,它是針對軟件項目的實(shí)施過(guò)程提出的方法策略。也是另一個(gè)角度的模式。
4. 常見(jiàn)的JAVA框架有什么?
WAF:
全稱(chēng):WEB APPLICATION FRAMEWORK
主要應用方面:EJB層,(WEB層也有,但是比較弱)。
主要應用技術(shù):EJB等
出處:
http://java.sun.com/blueprints/code/index.html簡(jiǎn)述:這是SUN在展示J2EE平臺時(shí)所用的例子PetStore(寵物商店系統)里面的框架。是SUN藍皮書(shū)例子程序中提出的應用框架。它實(shí)現了 MVC和其他良好的設計模式。SUN的網(wǎng)站上有技術(shù)資料,最好下載PetStore來(lái)研究,WEBLOGIC里自帶此系統,源碼在bea\weblogic700\samples\server\src\petstore。這是學(xué)習了解J2EE的首選框架。
免費。
Struts:
主要應用方面:WEB層。
主要應用技術(shù):JSP,TagLib,JavaBean,XML等
出處:
http://jakarta.apache.org/struts/index.html簡(jiǎn)述:這是APACHE的開(kāi)源項目,目前應用很廣泛?;贛VC模式,結構很好,基于JSP。Jbuilder8里已經(jīng)集成了STRUTS1.02的制作。
免費。
簡(jiǎn)述WAF+STRUTS結合的例子:WEB層用STRUTS,EJB層用WAF:
JSP(TagLib)——>ActionForm——>Action ——>
Event——>EJBAction——>EJB ——>DAO——>Database
JSP(TagLib) (forward) <——Action <——EventResponse<——
Turbine:
主要應用方面:WEB層。
主要應用技術(shù):servlet等
出處:
http://jakarta.apache.org/turbine/index.html簡(jiǎn)述:這是APACHE的開(kāi)源項目?;赟ERVLET。據說(shuō)速度比較快,基于service(pluggable implementation可插拔的執行組件)的方式提供各種服務(wù)。
免費。
COCOON:
主要應用方面:WEB層。
主要應用技術(shù):XML,XSP,servlet等
出處:
http://cocoon.apache.org/2.0/簡(jiǎn)述:這是APACHE的一個(gè)開(kāi)源項目?;赬ML,基于XSP(通俗地說(shuō),XSP是在XML靜態(tài)文檔中加入Java程序段后形成的動(dòng)態(tài)XML文檔。)。特點(diǎn)是可以與多種數據源交互,包括文件系統,數據庫,LDAP,XML資源庫,網(wǎng)絡(luò )數據源等。
免費。
ECHO:
主要應用方面:WEB層。
主要應用技術(shù):servlet等
出處:
http://www.nextapp.com/products/echo/簡(jiǎn)述:nextapp公司的一個(gè)開(kāi)源項目?;赟ERVLET。頁(yè)面可以做的很漂亮,結合echopoint,可以作出很多圖形效果(里面用了jfreechart包)。使用SWING的思想來(lái)作網(wǎng)頁(yè),把HTML當作JAVA的類(lèi)來(lái)做。但是大量使用Session,頁(yè)面分幀(Frame)很多,系統資源消耗很大。
免費。
JATO:
全稱(chēng):SUN ONE Application Framework
主要應用方面:WEB層。
主要應用技術(shù):JSP,TagLib,JavaBean等
出處:
http://www.sun.com/簡(jiǎn)述:這是SUN推出的一個(gè)商業(yè)性框架,一看名字就知道是結合SUN ONE的平臺推出的。我下載了JATO2.0看了一下,感覺(jué)有些簡(jiǎn)單,使用了JSP+TagLib+JavaBean。如他的DOC所說(shuō)JATO是適合用在小的WEB應用里。
免費。
TCF:
全稱(chēng):Thin-Client Framework
主要應用方面:JAVA GUI。
主要應用技術(shù):JAVA application等
出處:
http://www.alphaworks.ibm.com/tech/tcf簡(jiǎn)述:這是IBM出的一個(gè)框架?;贛VC模式,基于JAVA Application。推薦一篇介紹文章:
http://www-900.ibm.com/developerWorks/cn/java/j-tcf1/index.shtml收費:每個(gè)企業(yè)對象license:2000美元。
5.其實(shí)本文的目的在于“拋磚引玉”,希望各路高手請你們把各種框架的特點(diǎn)和出處羅列一下 ,供大家參考,選用。
如果你想了解以上內容更多細節請先到
http://www.google.com/搜索,如果你有其他問(wèn)題與我交流,歡迎到我的論壇來(lái):
http://UB1010.51.net/BBS/