自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

開(kāi)發(fā)框架的選擇和設(shè)計(jì)經(jīng)驗(yàn)談

開(kāi)發(fā) 架構(gòu)
這里將為大家講解開(kāi)發(fā)框架的選擇和設(shè)計(jì)方面的經(jīng)驗(yàn),這也是作者長(zhǎng)期開(kāi)發(fā)的總結(jié)。希望本文對(duì)大家有所幫助。
理解什么是框架

框架,即Framework。其實(shí)就是某種應(yīng)用的半成品,就是一組組件,供你選用完成你自己的系統(tǒng)。簡(jiǎn)單說(shuō)就是使用別人搭好的舞臺(tái),你來(lái)做表演。而且,框架一般是成熟的,不斷升級(jí)的軟件。

可以說(shuō),一個(gè)框架是一個(gè)可復(fù)用的設(shè)計(jì)構(gòu)件,它規(guī)定了應(yīng)用的體系結(jié)構(gòu),闡明了整個(gè)設(shè)計(jì)、協(xié)作構(gòu)件之間的依賴關(guān)系、責(zé)任分配和控制流程,表現(xiàn)為一組抽象類以及其實(shí)例之間協(xié)作的方法,它為構(gòu)件復(fù)用提供了上下文(Context)關(guān)系。因此構(gòu)件庫(kù)的大規(guī)模重用也需要框架。

框架的概念最早起源于Smalltalk環(huán)境,其中最著名的框架是Smalltalk 80的用戶界面框架MVC(Model-View-Controller)。

框架目前還沒(méi)有統(tǒng)一的定義,其中Ralph Johnson所給出的定義基本上為大多數(shù)研究人員所接受:

一個(gè)框架是一個(gè)可復(fù)用設(shè)計(jì),它是由一組抽象類及其實(shí)例間協(xié)作關(guān)系來(lái)表達(dá)的 【Johnson 98】。

這個(gè)定義是從框架內(nèi)涵的角度來(lái)定義框架的,當(dāng)然也可以從框架用途的角度來(lái)給出框架的定義:

一個(gè)框架是在一個(gè)給定的問(wèn)題領(lǐng)域內(nèi),一個(gè)應(yīng)用程序的一部分設(shè)計(jì)與實(shí)現(xiàn)【Bosch 97】。

框架要解決的問(wèn)題

框架要解決的最重要的一個(gè)問(wèn)題是技術(shù)整合的問(wèn)題,在J2EE的框架中,有著各種各樣的技術(shù),不同的軟件企業(yè)需要從J2EE中選擇不同的技術(shù),這就使得軟件企業(yè)最終的應(yīng)用依賴于這些技術(shù),技術(shù)自身的復(fù)雜性和技術(shù)的風(fēng)險(xiǎn)性將會(huì)直接對(duì)應(yīng)用造成沖擊。而應(yīng)用是軟件企業(yè)的核心,是競(jìng)爭(zhēng)力的關(guān)鍵所在,因此應(yīng)該將應(yīng)用自身的設(shè)計(jì)和具體的實(shí)現(xiàn)技術(shù)解耦。這樣,軟件企業(yè)的研發(fā)將集中在應(yīng)用的設(shè)計(jì)上,而不是具體的技術(shù)實(shí)現(xiàn),技術(shù)實(shí)現(xiàn)是應(yīng)用的底層支撐,它不應(yīng)該直接對(duì)應(yīng)用產(chǎn)生影響。

為什么要進(jìn)行框架開(kāi)發(fā)

框架的最大好處就是重用??蚣苤苑Q為框架,是因?yàn)樗梢灾赜谩T谲浖M織中形成以框架為核心的開(kāi)發(fā)方式,在開(kāi)發(fā)中使用框架,并在開(kāi)發(fā)完成后改進(jìn)框架。在這個(gè)反覆的過(guò)程中,重用的工作就已經(jīng)開(kāi)展起來(lái)了。面向?qū)ο笙到y(tǒng)獲得的最大的復(fù)用方式就是框架,一個(gè)大的應(yīng)用系統(tǒng)往往可能由多層互相協(xié)作的框架組成。框架能重用設(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)架;  框架還能重用分析。所有的人員若按照框架的思想來(lái)分析事務(wù),那么就能將它劃分為同樣的構(gòu)件,采用相似的解決方法,從而使采用同一框架的分析人員之間能進(jìn)行溝通。

框架的再一個(gè)好處就是可以優(yōu)化架構(gòu)。軟件架構(gòu),亦即體系結(jié)構(gòu),包括組件元素、元素互助合作模式、基礎(chǔ)要求與限制。這說(shuō)明架構(gòu)的設(shè)計(jì)就是將各組件元素以某些理想的合作模式組織起來(lái),以達(dá)成系統(tǒng)的基本功能和限制??蚣芷鋵?shí)就是在特定領(lǐng)域基于體系結(jié)構(gòu)的可重用的設(shè)計(jì),即框架是體系結(jié)構(gòu)在特定領(lǐng)域下的應(yīng)用??蚣艽砹艘环N優(yōu)秀的軟件架構(gòu)??蚣芏x了擴(kuò)展方式,從而規(guī)范了框架的使用行為。這使得軟件能夠保持整體架構(gòu)的穩(wěn)定性和一致性。

采用框架技術(shù)進(jìn)行軟件開(kāi)發(fā)的主要特點(diǎn)包括:領(lǐng)域內(nèi)的軟件結(jié)構(gòu)一致性好;建立更加開(kāi)放的系統(tǒng);重用代碼大大增加,軟件生產(chǎn)效率和質(zhì)量也得到了提高;軟件設(shè)計(jì)人員要專注于對(duì)領(lǐng)域的了解,使需求分析更充分;存儲(chǔ)了經(jīng)驗(yàn),可以讓那些經(jīng)驗(yàn)豐富的人員去設(shè)計(jì)框架和領(lǐng)域構(gòu)件,而不必限于低層編程;允許采用快速原型技術(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)。

框架對(duì)組織的作用

知識(shí)積累??蚣艿暮诵膬r(jià)值是對(duì)知識(shí)的積累。軟件開(kāi)發(fā)是一項(xiàng)知識(shí)性的活動(dòng)。但是知識(shí)存在于人的大腦中,是最難進(jìn)行積累的。而在軟件開(kāi)發(fā)中,代碼是最確定的知識(shí),人和機(jī)器通過(guò)瀏覽代碼都能夠了解代碼所表達(dá)的意思,而且不會(huì)出現(xiàn)不同的理解。所以,從代碼出發(fā)進(jìn)行知識(shí)的積累是最佳的辦法??蚣芫褪沁@種思路的產(chǎn)出物??蚣馨舜罅康拇a,這些代碼是對(duì)某個(gè)特定問(wèn)題領(lǐng)域中抽象概念及這些抽象概念之間關(guān)系的描述。所以,框架能夠勝任知識(shí)積累的工作。

保護(hù)資產(chǎn)。知識(shí)積累本身就是一項(xiàng)對(duì)資產(chǎn)的保護(hù)工作。而另一項(xiàng)很重要的保護(hù)工作就是軟件組織(尤其是企業(yè))需要保證對(duì)知識(shí)的學(xué)習(xí)和改進(jìn)是經(jīng)過(guò)合法授權(quán)的。例如,知識(shí)的非法外流是任何組織都不希望看到的。將知識(shí)積累為框架的形式有助于緩解這種情況。

框架好壞關(guān)系J2EE項(xiàng)目成敗

框架技術(shù)通過(guò)重用提高了軟件的生產(chǎn)效率,一個(gè)軟件系統(tǒng)由兩大部分組成: 針對(duì)本應(yīng)用的新設(shè)計(jì)和可重用的軟件組件或框架。后者所占比例越大,那需要實(shí)現(xiàn)的新設(shè)計(jì)或?qū)崿F(xiàn)工作量就會(huì)越小,生產(chǎn)效率越高、成本越低。J2EE項(xiàng)目成敗主要取決于架構(gòu)設(shè)計(jì)好壞以及合適框架的選擇,而不是體現(xiàn)在對(duì)技術(shù)的具體應(yīng)用上(絕不能盲目的最求新技術(shù),要記住:技術(shù)是為了應(yīng)用),常常有人將一個(gè)J2EE項(xiàng)目的失敗歸咎于后者,這可能是最大的誤導(dǎo)。

J2EE項(xiàng)目是通過(guò)框架、模式的設(shè)計(jì)運(yùn)用達(dá)到控制軟件質(zhì)量的目的的。雖然這是很多喜歡自由編程的程序員所不喜歡的,但是它帶來(lái)了穩(wěn)定的軟件質(zhì)量和可重用的組件,為規(guī)模生產(chǎn)創(chuàng)造了條件。不僅如此,它還降低了對(duì)開(kāi)發(fā)框架以外其他開(kāi)發(fā)人員的技術(shù)要求,使大多數(shù)開(kāi)發(fā)人員無(wú)需很高的技術(shù),就能在已有的框架下進(jìn)行開(kāi)發(fā),而且能大大縮短開(kāi)發(fā)周期。根據(jù)自己項(xiàng)目領(lǐng)域特點(diǎn),在J2EE框架下設(shè)計(jì)自己領(lǐng)域的應(yīng)用框架,不僅可以提高在該領(lǐng)域軟件開(kāi)發(fā)的效率,而且可以節(jié)約開(kāi)發(fā)成本和維護(hù)成本。

開(kāi)發(fā)框架的選擇和設(shè)計(jì)

理解了上述開(kāi)發(fā)框架的作用和需要解決的問(wèn)題后,設(shè)計(jì)和選擇框架的準(zhǔn)則就很顯而易見(jiàn)了,關(guān)于技術(shù)上應(yīng)該考慮的準(zhǔn)則我這里就不再贅述,只提出一下個(gè)人感覺(jué)應(yīng)該考慮的幾個(gè)問(wèn)題:

1:框架應(yīng)該能夠?qū)ξ覀兊拈_(kāi)發(fā)過(guò)程提供更多、更好幫助。因?yàn)槭褂每蚣艿脑汲霭l(fā)點(diǎn)就是為了通過(guò)知識(shí)的重用提高開(kāi)發(fā)效率。我們應(yīng)該知道任何開(kāi)發(fā)框架都不可能是十全十美的,也不可能是適應(yīng)所有的應(yīng)用場(chǎng)景的,也就是說(shuō)任何開(kāi)發(fā)框架都有它適用的范圍。因此我們絕不能為了技術(shù)而技術(shù),適用就好了,很難簡(jiǎn)單的說(shuō)那種技術(shù)或框架更好,沒(méi)有必要陷入技術(shù)的反復(fù)比較和反復(fù)選擇的深淵中。

2:學(xué)習(xí)曲線要平滑,技術(shù)是為應(yīng)用服務(wù)的,開(kāi)發(fā)框架的學(xué)習(xí)一定要簡(jiǎn)單,上手一定要快,對(duì)開(kāi)發(fā)人員的要求不能太高。沒(méi)有什么比使用能得到更深的體會(huì)。需要半個(gè)月或者一個(gè)月學(xué)習(xí)周期的框架,可能在還沒(méi)學(xué)會(huì)時(shí)項(xiàng)目就該結(jié)束了。

3: 一定要能得到很好的技術(shù)支持。在應(yīng)用的過(guò)程中,或多或少都會(huì)出現(xiàn)這樣或者那樣的問(wèn)題,如果不能很快很好的解決,會(huì)對(duì)整個(gè)項(xiàng)目開(kāi)發(fā)帶來(lái)影響。一定要考慮綜合成本,其實(shí)這是目前應(yīng)用開(kāi)源軟件最大的問(wèn)題,碰到問(wèn)題除了死肯文檔就是查閱源代碼,或者是網(wǎng)上搜尋解決的辦法,通常一個(gè)問(wèn)題就會(huì)導(dǎo)致一兩天的開(kāi)發(fā)停頓,嚴(yán)重的甚至需要一個(gè)星期或者更長(zhǎng),項(xiàng)目的進(jìn)度就很難控制了。

4:考慮對(duì)團(tuán)隊(duì)要求的影響,使得組織的開(kāi)發(fā)團(tuán)隊(duì)易于組建和在不同開(kāi)發(fā)組之間流動(dòng),以使那些優(yōu)先需要解決的任務(wù)能夠解決。

5:絕對(duì)不能因?yàn)閭€(gè)人對(duì)技術(shù)的好惡和對(duì)新技術(shù)的追求,而隨意使用到框架的設(shè)計(jì)和開(kāi)發(fā)中。開(kāi)發(fā)框架絕不是簡(jiǎn)單的技術(shù)堆疊和拼奏,應(yīng)該在團(tuán)隊(duì)的共同選擇的基礎(chǔ)之上建立。

【編輯推薦】

  1. 介紹幾個(gè)開(kāi)源的JSP開(kāi)發(fā)框架
  2. 新一代Java Web開(kāi)發(fā)框架JSF框架
  3. 如何選擇最合適的Web開(kāi)發(fā)框架
  4. 開(kāi)發(fā)框架Spring技巧之活用FactoryBean
  5. 如何設(shè)計(jì)一個(gè)好的J2EE開(kāi)發(fā)框架
責(zé)任編輯:彭凡 來(lái)源: 51CTO博客
相關(guān)推薦

2016-01-11 11:20:43

2012-07-13 14:25:59

2011-09-09 09:50:40

Oracle

2017-01-20 09:43:12

日志告警挖掘

2009-06-29 15:39:53

Servlet和JSPServlet引擎

2009-11-02 11:11:07

VB.NET OOP設(shè)

2013-07-29 12:45:19

iOS開(kāi)發(fā)經(jīng)驗(yàn)iOS提高應(yīng)用開(kāi)發(fā)效率

2010-03-23 08:42:26

ASP.NET MVC

2012-06-18 10:59:12

WEB開(kāi)發(fā)項(xiàng)目

2015-09-16 10:13:16

游戲性能

2009-09-14 15:04:44

2012-08-06 09:27:59

2011-08-15 10:27:48

2011-06-21 16:26:19

SEO內(nèi)部?jī)?yōu)化

2018-09-18 09:28:05

PCB布線數(shù)字布線經(jīng)驗(yàn)

2024-05-28 07:01:29

2011-07-08 09:27:04

C#

2013-04-25 09:41:33

網(wǎng)管高級(jí)網(wǎng)管網(wǎng)絡(luò)管理

2018-10-29 11:41:22

架構(gòu)MVCAndroid

2010-08-17 13:23:49

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)