应用框架的特点
1.1.2 應(yīng)用框架的特點(diǎn)
應(yīng)用框架相比其它程序結(jié)構(gòu)而言具有五大主要特點(diǎn):模塊化、可重用性、可擴(kuò)展性、簡(jiǎn)單性和可維護(hù)性2,盡管這些特點(diǎn)并非應(yīng)用框架所完全特有,但它卻很好地保持了這些特點(diǎn)的平衡性,對(duì)于編寫結(jié)構(gòu)復(fù)雜、需求多變的大中型應(yīng)用軟件系統(tǒng)而言不啻為最佳選擇之一。
模塊化
應(yīng)用框架可以從邏輯上被劃分為多個(gè)邏輯獨(dú)立的層次或模塊。模塊化并非應(yīng)用框架的獨(dú)特之處,許多應(yīng)用程序都具備這個(gè)的特點(diǎn),它的好處是將整個(gè)應(yīng)用獨(dú)立為多個(gè)關(guān)聯(lián)的模塊,從而提高了應(yīng)用的聚合性,降低了應(yīng)用的耦合性。各個(gè)獨(dú)立的模塊通過統(tǒng)一的管道或協(xié)議進(jìn)行通訊互動(dòng),這樣,當(dāng)一個(gè)模塊內(nèi)部發(fā)生重大改變時(shí),只要它的通訊入口和出口保持不變,就不會(huì)影響到系統(tǒng)中其它模塊的有效性和可靠性。
從開發(fā)效率的層面上而言,模塊化是實(shí)現(xiàn)“人盡其能”的好方式。將應(yīng)用劃分為不同的模塊,可以使用不同能力和技術(shù)的人員分別擔(dān)當(dāng)?shù)瑫r(shí)完成。如B/S結(jié)構(gòu)的應(yīng)用,可以讓美工負(fù)責(zé)界面端(UI層)的設(shè)計(jì),熟悉ASP.NET、JSP的程序員負(fù)責(zé)應(yīng)用層,熟悉服務(wù)器編程的人員開發(fā)Web Service,精通數(shù)據(jù)庫設(shè)計(jì)的人員負(fù)責(zé)數(shù)據(jù)庫。這樣齊頭并進(jìn)的開發(fā)效率較之程序員從頭到腳大包大攬無疑高效得多。
可重用性
代碼的可重用性是衡量代碼質(zhì)量的一個(gè)重要標(biāo)志。無論是使用函數(shù)、類還是其它更高層次的重用模型,都是為了在某種程度上提高重用性,使程序員避免編寫重復(fù)的代碼。而在應(yīng)用框架中,可重用的不僅僅是函數(shù)和類,更包括多個(gè)類組成的一套邏輯和設(shè)計(jì)模式。可以簡(jiǎn)單地認(rèn)為,設(shè)計(jì)框架的主要目的之一便是為了實(shí)現(xiàn)代碼的重用。
可重用性并不是一件容易辦到的事情,相反,設(shè)計(jì)具有良好可重用性的系統(tǒng)不僅困難而且需要不斷迭代式設(shè)計(jì)。在面向?qū)ο笳Z言中,一個(gè)類型被其它對(duì)象交互引用后,很容易在修復(fù)該類型某個(gè)邏輯錯(cuò)誤時(shí)導(dǎo)致其它對(duì)象的邏輯錯(cuò)誤呈指數(shù)級(jí)產(chǎn)生,這種所謂的“特征交互作用”是設(shè)計(jì)致命的邏輯錯(cuò)誤之一,也是可重用性的最大敵人。
最簡(jiǎn)單的代碼重用類型是使用函數(shù)庫(Library),高質(zhì)量的相關(guān)函數(shù)可以組合為一個(gè)可分發(fā)庫,但這些函數(shù)之間并不一定存在緊密的聯(lián)系,使用者必須從函數(shù)庫中找出合適的函數(shù),它的使用效率取決于使用者對(duì)函數(shù)庫的熟悉程度和文檔的完善程度。
比函數(shù)庫復(fù)雜一些的是類庫,類庫提供了類(Class)而非單一的函數(shù),一個(gè)類通常會(huì)包含具有一些關(guān)聯(lián)關(guān)系的函數(shù),使得這些函數(shù)更容易區(qū)分;除此以外,類庫通常還會(huì)使用抽象類進(jìn)行層次設(shè)計(jì),這樣能夠使類的功能函數(shù)在使用上更加簡(jiǎn)單。
設(shè)計(jì)模式(Design Model)是另一種更高級(jí)的重用,它描述的是如何高效地創(chuàng)建面向?qū)ο笙到y(tǒng)的各個(gè)部分,如何在某種情況下使用特定的策略來解決具體問題,這種重用涉及到面向?qū)ο蟮姆椒▽W(xué)。
框架重用是一種集合了類庫、設(shè)計(jì)模式、工作模式(有時(shí)還有函數(shù)庫)的重用模式,它重用的不僅僅是具體功能和解決問題的抽象策略,還包括解決問題的具體流程和規(guī)則。從重用程度而言,應(yīng)用框架是最高級(jí)的重用模式。
應(yīng)用框架與函數(shù)庫的差別在于,后者只是提供了多組離散的,內(nèi)部沒有或很少量邏輯關(guān)系的函數(shù)集,這些函數(shù)的調(diào)用順序和調(diào)用關(guān)系并不明確,就好像使用Win32 API開發(fā)Windows程序一樣,一個(gè)簡(jiǎn)單的窗體設(shè)計(jì)就必須有上百行代碼,而且使用者還必須牢記API的使用順序;而使用MFC框架編寫窗體,代碼數(shù)量就少的多,程序員需要考慮的內(nèi)部細(xì)節(jié)也少得多,因?yàn)镸FC已經(jīng)將大量不必要暴露的細(xì)節(jié)隱藏在框架幕后,開發(fā)者不必關(guān)心那些通用的、繁瑣的實(shí)現(xiàn)。除此以外,Visual C++還為開發(fā)者提供了多種工作模式,即開發(fā)不同類型程序的一般模板、向?qū)Ш头椒?#xff0c;所有這些都是應(yīng)用框架與一般函數(shù)庫之間的最大差別。
模塊化與可重用性并沒有直接的關(guān)系,模塊化的軟件并非都有很好的重用性能,可重用的組件也并非一定被模塊化。通常來說,模塊化實(shí)現(xiàn)分治策略,可重用性是在不同的地方對(duì)功能的重復(fù)利用3。
可擴(kuò)展性
可擴(kuò)展性是應(yīng)用框架最顯著的特征之一,它意味著應(yīng)用框架的功能具有生長(zhǎng)的能力。沒有擴(kuò)展能力的應(yīng)用框架毫無使用的價(jià)值和意義,因?yàn)榭蚣鼙旧砭褪菫榱颂峁┮粋€(gè)統(tǒng)一的上下文環(huán)境給具體的應(yīng)用使用。應(yīng)用框架的可擴(kuò)展性使得我們能夠基于一個(gè)平臺(tái)實(shí)現(xiàn)不同的功能,滿足不同的應(yīng)用,當(dāng)然,許多應(yīng)用需要平臺(tái)本身的支持。
框架的可擴(kuò)展性主要是通過繼承和聚合兩種方式實(shí)現(xiàn)的。繼承方式是指通過派生類繼承基類,通過重用基類的功能并定義新功能的方式實(shí)現(xiàn)功能擴(kuò)展;聚合方式是指調(diào)用不同的類型組合為一個(gè)新類型而擴(kuò)展出全新的功能。這兩種方法之間并不一定存在最好的模式,開發(fā)人員應(yīng)該在合適的場(chǎng)合使用它們,但一般而言,我們推薦首選聚合而不是繼承來擴(kuò)展功能。
以MFC框架為例,擴(kuò)展它的主要手段是在繼承不同的基類上開發(fā)出具有新功能的類而達(dá)到擴(kuò)展目的;在插件式框架中,插件類型則通過實(shí)現(xiàn)框架公布的接口完成擴(kuò)展功能。
簡(jiǎn)單性
框架的簡(jiǎn)單性并不能使用框架擴(kuò)展組件開發(fā)的難易程度來衡量,事實(shí)上,沒有哪一個(gè)框架能夠保證基于自身開發(fā)的程序在邏輯設(shè)計(jì)和代碼工作量上比不使用框架開發(fā)更有優(yōu)勢(shì)。框架的簡(jiǎn)單性體現(xiàn)在框架提供了一個(gè)明確的工作模式,即開發(fā)某種類型擴(kuò)展插件的一般實(shí)現(xiàn)步驟,框架插件內(nèi)在的關(guān)聯(lián)和管理由框架本身控制而無需框架的使用者考慮,使用者可能根本不熟悉框架的內(nèi)部協(xié)作結(jié)構(gòu),但擴(kuò)展插件的開發(fā)可以很簡(jiǎn)單地在統(tǒng)一步驟的基礎(chǔ)上進(jìn)行升華和細(xì)化。
框架簡(jiǎn)單性還體現(xiàn)在它一般都有一個(gè)具有內(nèi)在邏輯關(guān)聯(lián)和豐富功能的“輔助類庫”,開發(fā)人員能夠充分利用框架已經(jīng)存在的輔助功能和代碼。如在.NET Framework中,如安全、加密、數(shù)據(jù)流等一般功能都完全可以直接從框架類獲得而無需程序員自己開發(fā)實(shí)現(xiàn)。
可維護(hù)性
可維護(hù)性是業(yè)務(wù)需求變化后應(yīng)用能夠方便地進(jìn)行改變的能力。為了使框架能夠?yàn)椴煌膽?yīng)用共享使用,它可以由與業(yè)務(wù)完全無關(guān)的通用組件組成,而應(yīng)用代碼基于這些通用組件基礎(chǔ)上實(shí)現(xiàn),這樣使應(yīng)用需求的改變對(duì)框架本身的影響降為最低;框架也可以劃分多個(gè)層次,底層是通用層,而在通用層上的各層逐級(jí)加入與不同層次應(yīng)用相關(guān)的元素,這樣某個(gè)應(yīng)用改變后的代碼修改工作量能夠盡量減少而不會(huì)牽一發(fā)而系全身。
應(yīng)用框架具備以上這些優(yōu)點(diǎn),但它最激動(dòng)人心的優(yōu)勢(shì)莫過于提供了一個(gè)統(tǒng)一的“舞臺(tái)”,并協(xié)調(diào)了舞臺(tái)上表演的各位“演員”的內(nèi)部交互,對(duì)于“演員”的成長(zhǎng),框架也提供了一套培養(yǎng)模式和許多額外幫助。
應(yīng)用框架設(shè)計(jì)的困難之處在于,設(shè)計(jì)者如何把握各種應(yīng)用的共性與特性,并在這些共性與特性基礎(chǔ)上抽象出通用的邏輯并能夠重用它們;框架設(shè)計(jì)者如何確定框架的通用點(diǎn)和擴(kuò)展點(diǎn),這些通用點(diǎn)和擴(kuò)展點(diǎn)抽象程度是否合理?
應(yīng)用框架設(shè)計(jì)之初的分析工作非常抽象,因此,一開始便要求設(shè)計(jì)一個(gè)完美的框架內(nèi)容是非常困難的,除非一開始開發(fā)人員就有一個(gè)完善的需求設(shè)計(jì)。在相當(dāng)多的情況下,框架設(shè)計(jì)者必須改變和調(diào)整設(shè)計(jì)之初對(duì)通用點(diǎn)和擴(kuò)展點(diǎn)的設(shè)計(jì);在框架雛形設(shè)計(jì)完成后,由于新的應(yīng)用組件加入框架或現(xiàn)存的框架組件發(fā)生變化,設(shè)計(jì)者需要修改框架使它能夠適應(yīng)新的改變。因此,框架設(shè)計(jì)是一個(gè)迭代過程,設(shè)計(jì)人員必須不斷地根據(jù)應(yīng)用的需求進(jìn)行分析、設(shè)計(jì)、實(shí)現(xiàn)和測(cè)試,只有這樣,框架雛形才能成長(zhǎng)為一個(gè)健壯、靈活和具有較高擴(kuò)展性的平臺(tái)。
總結(jié)
- 上一篇: 基金被套一般多久解套 教你一些补救的措
- 下一篇: string.Format出现异常输入的