在編碼的世界里,程序員永遠(yuǎn)不要期待東西保持靜止太久。技術(shù)已經(jīng)決定了我們?nèi)绾位?dòng)、創(chuàng)造、學(xué)習(xí)、生活等,并且不斷發(fā)展。對(duì)于程序員來(lái)說(shuō),只有靠近和依賴最新技術(shù)才能完成任務(wù)。而且最深刻的改變之一就是框架、編程語(yǔ)言以及兩者之間的范式轉(zhuǎn)變。
編程語(yǔ)言本質(zhì)上是與計(jì)算機(jī)通信的方式,并通過(guò)使用語(yǔ)法和語(yǔ)義告訴計(jì)算機(jī)要做什么??蚣苁菂R集了一起完成任務(wù)的程序的集合,使編碼更有效率,并且通常使程序員的生活更容易。
當(dāng)然,二者絕不是對(duì)立的關(guān)系,只是編程社區(qū)中仍然存在一些爭(zhēng)議:到底是應(yīng)該自己從頭開(kāi)始編寫(xiě)代碼還是使用各種框架簡(jiǎn)化編碼過(guò)程呢?有些很受歡迎的框架可能會(huì)給人帶來(lái)錯(cuò)覺(jué),比如Ruby on Rails和Angular.JS等,其實(shí),編程語(yǔ)言和隨附的框架都在不斷上升和繁榮。
框架VS自定義解決方案
為什么框架發(fā)展得越來(lái)越好,因?yàn)樵絹?lái)越多的程序員選擇使用框架。當(dāng)處于實(shí)際的項(xiàng)目開(kāi)發(fā)中,程序員就會(huì)發(fā)現(xiàn)項(xiàng)目周期短,使用框架可以最有效地節(jié)約時(shí)間。如果完全從頭開(kāi)始編程,使用時(shí)間太多不說(shuō),對(duì)程序員的個(gè)人編碼水平也提出了很高的要求,一定要非常了解所用的編程語(yǔ)言才具備從頭開(kāi)始的實(shí)力。
但是,如果使用框架沒(méi)有缺點(diǎn),這篇文章就沒(méi)有存在的必要了。關(guān)鍵是,雖然框架做了很多基礎(chǔ)工作,但這并一定完全適合于項(xiàng)目所需,可能要進(jìn)行一些修改。而從頭開(kāi)始編碼,自然是完全按照項(xiàng)目需求來(lái)的,甚至你會(huì)比框架發(fā)布者做得更好。
框架,比如Ruby on Rails可幫助用戶減少編碼細(xì)節(jié)問(wèn)題,很多不好的編碼習(xí)慣都將被良好的框架清理。當(dāng)然,使用框架也需要對(duì)所用編程語(yǔ)言有一定了解才可以,您需要對(duì)Ruby有一個(gè)全面的認(rèn)識(shí),才可以用好Rails。從一般設(shè)計(jì)到安全性問(wèn)題,框架可以代替一些繁重的工作。
自動(dòng)化正在接管一切
現(xiàn)在,自動(dòng)化正在滲入整個(gè)編碼過(guò)程,程序員不需要再細(xì)細(xì)梳理數(shù)千行代碼,很多無(wú)意義的附加組件或錯(cuò)誤被編譯器和自動(dòng)化協(xié)議剝離,旨在刪除不必要的代碼段。這種演變要求程序員對(duì)特定代碼的準(zhǔn)確性要十分了解。
學(xué)習(xí)正確的工具
正如文章開(kāi)頭所說(shuō),編程語(yǔ)言和框架都在不斷成長(zhǎng)。而且其成長(zhǎng)之一就是依賴于應(yīng)用程序接口(API)和算法來(lái)幫助程序員完成任務(wù)。例如,框架通常定義和實(shí)現(xiàn)算法,并且使得算法正確,這有時(shí)對(duì)編程成功至關(guān)重要,而不是語(yǔ)法細(xì)節(jié)。如果涉及到一些框架無(wú)法實(shí)現(xiàn)的功能,還是需要程序員親自動(dòng)手??蚣苤皇强梢怨?jié)約時(shí)間的編程工具,在程序員的工作中扮演著“輔助”角色。
建議:使用正確的框架,結(jié)合部分自己編碼可以有效縮短項(xiàng)目開(kāi)發(fā)周期,同時(shí)準(zhǔn)確率高,降低無(wú)效代碼數(shù)量!
程序開(kāi)發(fā)為什么要使用框架
什么是框架
在的J2EE開(kāi)發(fā)中,經(jīng)常會(huì)提到“框架”這個(gè)詞匯,例如Spring,Struts,Webx等等都稱之為J2EE開(kāi)發(fā)框架。那么什么是框架呢?
框架的英文為Framework,帶有骨骼,支架的含義。
在軟件工程中,框架被定義為整個(gè)或部分系統(tǒng)的可重用設(shè)計(jì),表現(xiàn)為一組抽象構(gòu)件及構(gòu)件實(shí)例間交互的方法;另一種定義認(rèn)為,框架是可被應(yīng)用開(kāi)發(fā)者定制的應(yīng)用骨架。
一個(gè)框架是一個(gè)可復(fù)用的設(shè)計(jì)構(gòu)件,它規(guī)定了應(yīng)用的體系結(jié)構(gòu),闡明了整個(gè)設(shè)計(jì)、協(xié)作構(gòu)件之間的依賴關(guān)系、責(zé)任分配和控制流程,表現(xiàn)為一組抽象類(lèi)以及其實(shí)例之間協(xié)作的方法,它為構(gòu)件復(fù)用提供了上下文(Context)關(guān)系。
框架是實(shí)現(xiàn)了某應(yīng)用領(lǐng)域通用功能的底層服務(wù)。使用這種框架的編程人員可以在一個(gè)通用功能已經(jīng)實(shí)現(xiàn)的基礎(chǔ)上開(kāi)始具體的系統(tǒng)開(kāi)發(fā)??蚣芴峁┝怂袘?yīng)用期望的默認(rèn)行為的類(lèi)集合。具體的應(yīng)用通過(guò)重寫(xiě)子類(lèi)或組裝對(duì)象來(lái)支持應(yīng)用專(zhuān)用的行為。
通俗的說(shuō),框架是完成是某種應(yīng)用的半成品,提供了一些常用的工具類(lèi)和一些基礎(chǔ)通用化的組件,可以供開(kāi)發(fā)人員在此基礎(chǔ)上,更便捷的完成各自特有的系統(tǒng)。
為什么要用框架
軟件系統(tǒng)發(fā)展到今天已經(jīng)很復(fù)雜了,特別是服務(wù)器端軟件,涉及到的知識(shí),內(nèi)容,非常廣泛。這樣開(kāi)發(fā)出完善健壯的軟件,對(duì)程序員的要求將會(huì)非常高。如果采用成熟,穩(wěn)健的框架,那么一些基礎(chǔ)的通用工作,比如,事物處理,安全性,數(shù)據(jù)流控制等都可以交給框架處理,那么程序員只需要集中精力完成系統(tǒng)的業(yè)務(wù)邏輯設(shè)計(jì),可以降低開(kāi)發(fā)難度。
從程序員角度看,使用框架最顯著的好處是重用,由于框架能重用代碼,因此從一已有構(gòu)件庫(kù)中建立應(yīng)用變得非常容易,因?yàn)闃?gòu)件都采用框架統(tǒng)一定義的接口,從而使構(gòu)件間的通信簡(jiǎn)單??蚣苣苤赜迷O(shè)計(jì)。它提供可重用的抽象算法及高層設(shè)計(jì),并能將大系統(tǒng)分解成更小的構(gòu)件,而且能描述構(gòu)件間的內(nèi)部接口。這些標(biāo)準(zhǔn)接口使在已有的構(gòu)件基礎(chǔ)上通過(guò)組裝建立各種各樣的系統(tǒng)成為可能。只要符合接口定義,新的構(gòu)件就能插入框架中,構(gòu)件設(shè)計(jì)者就能重用構(gòu)架的設(shè)計(jì)。框架還能重用分析。所有的人員若按照框架的思想來(lái)分析事物,那么就能將它劃分為同樣的構(gòu)件,采用相似的解決方法,從而使采用同一框架的分析人員之間能進(jìn)行溝通。
一種技術(shù),最終都是為業(yè)務(wù)發(fā)展而服務(wù)的。從業(yè)務(wù)的角度來(lái)講。首先,框架的是為了企業(yè)的業(yè)務(wù)發(fā)展和戰(zhàn)略規(guī)劃而服務(wù)的,他服從于企業(yè)的愿景(vision);其次,框架最重要的目標(biāo)是提高企業(yè)的競(jìng)爭(zhēng)能力,包括降低成本、提高質(zhì)量、改善客戶滿意程度,控制進(jìn)度等方面。最后,框架實(shí)現(xiàn)這一目標(biāo)的方式是進(jìn)行有效的知識(shí)積累。軟件開(kāi)發(fā)是一種知識(shí)活動(dòng),因此知識(shí)的聚集和積累是至關(guān)重要的??蚣苣軌虿捎靡环N結(jié)構(gòu)化的方式對(duì)某個(gè)特定的業(yè)務(wù)領(lǐng)域進(jìn)行描述,也就是將這個(gè)領(lǐng)域相關(guān)的技術(shù)以代碼、文檔、模型等方式固化下來(lái)。
合理的使用框架可以帶來(lái)的好處
重用代碼大大增加,軟件生產(chǎn)效率和質(zhì)量也得到了提高;
代碼結(jié)構(gòu)的規(guī)范化,降低程序員之間溝通以及日后維護(hù)的成本;
知識(shí)的積累,可以讓那些經(jīng)驗(yàn)豐富的人員去設(shè)計(jì)框架和領(lǐng)域構(gòu)件,而不必限于低層編程;
軟件設(shè)計(jì)人員要專(zhuān)注于對(duì)領(lǐng)域的了解,使需求分析更充分;
允許采用快速原型技術(shù); 有利于在一個(gè)項(xiàng)目?jī)?nèi)多人協(xié)同工作;
大粒度的重用使得平均開(kāi)發(fā)費(fèi)用降低,開(kāi)發(fā)速度加快,開(kāi)發(fā)人員減少,維護(hù)費(fèi)用降低,而參數(shù)化框架使得適應(yīng)性、靈活性增強(qiáng)。
框架分類(lèi)
框架與類(lèi)庫(kù)是不同的,框架強(qiáng)調(diào)的是軟件的設(shè)計(jì)重用性和系統(tǒng)的可擴(kuò)充性,以縮短大型應(yīng)用軟件系統(tǒng)的開(kāi)發(fā)周期,提高開(kāi)發(fā)質(zhì)量。
與傳統(tǒng)的基于類(lèi)庫(kù)的面向?qū)ο笾赜眉夹g(shù)比較,應(yīng)用框架更注重于面向?qū)I(yè)領(lǐng)域的軟件重用。應(yīng)用框架具有領(lǐng)域相關(guān)性,構(gòu)件根據(jù)框架進(jìn)行復(fù)合而生成可運(yùn)行的系統(tǒng)??蚣艿牧6仍酱螅渲邪念I(lǐng)域知識(shí)就更加完整。
J2EE有很多開(kāi)源框架,一般每一種框架都會(huì)針對(duì)某一方面領(lǐng)域。
Struts是基于JavaEE應(yīng)用的MVC設(shè)計(jì)模式的應(yīng)用框架,減弱了業(yè)務(wù)邏輯接口和數(shù)據(jù)接口之間的耦合,以及讓視圖層更富于變化。
Hibernate是一個(gè)對(duì)象關(guān)系映射框架,目的是讓Java程序員可以使用對(duì)象編程思維來(lái)操縱數(shù)據(jù)庫(kù)。
Spring是一個(gè)綜合型框架,致力于J2EE應(yīng)用的各層的解決方案,而不是僅僅專(zhuān)注于某一層的方案。可以說(shuō)Spring可以作為應(yīng)用開(kāi)發(fā)的“一站式”選擇,并貫穿表現(xiàn)層、業(yè)務(wù)層及持久層。然而,Spring并不想取代那些已有的框架,它可以與其他框架無(wú)縫地整合。
考慮到面向的領(lǐng)域,以及實(shí)現(xiàn)編碼實(shí)現(xiàn),我們可以將將框架至少分為三類(lèi)。
第一類(lèi)是基礎(chǔ)類(lèi)庫(kù),主要包含多數(shù)項(xiàng)目所需要的類(lèi)庫(kù)。(開(kāi)發(fā)人員將其作為一個(gè)類(lèi)庫(kù)使用,可以簡(jiǎn)化一些常用的算法邏輯。)
第二類(lèi)是基礎(chǔ)框架,該框架應(yīng)該整合或者實(shí)現(xiàn)J2EE開(kāi)發(fā)所需要的常用功能。(此框架可以為各類(lèi)WEB項(xiàng)目開(kāi)發(fā)提供基礎(chǔ)支持。)
第三類(lèi)是平臺(tái)框架,針對(duì)于某種特定領(lǐng)域,實(shí)現(xiàn)特定領(lǐng)域所需要的常用功能。(這個(gè)框架需要實(shí)現(xiàn)具體領(lǐng)域的業(yè)務(wù)的邏輯。并且應(yīng)該支持各類(lèi)擴(kuò)展)