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