首頁(yè) 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 模擬考試 考友錄 實(shí)用文檔 繽紛校園 英語(yǔ)學(xué)習(xí)
2010考研 | 自學(xué)考試 | 成人高考 | 專(zhuān) 升 本 | 法律碩士 | MBA/MPA | 中 科 院
四六級(jí) | 商務(wù)英語(yǔ) | 公共英語(yǔ) | 職稱(chēng)日語(yǔ) | 職稱(chēng)英語(yǔ) | 博思 | 口譯筆譯 | GRE GMAT | 日語(yǔ) | 托福
雅思 | 專(zhuān)四專(zhuān)八 | 新概念 | 自考英語(yǔ) | 零起點(diǎn)英、、、、韓語(yǔ) | 在職申碩英語(yǔ)
在職攻碩英語(yǔ) | 成人英語(yǔ)三級(jí)
等級(jí)考試 | 水平考試 | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證
公務(wù)員 | 報(bào)關(guān)員 | 報(bào)檢員 | 外銷(xiāo)員 | 司法考試 | 導(dǎo)游考試 | 教師資格 | 國(guó)際商務(wù)師 | 跟單員
單證員 | 物流師 | 價(jià)格鑒證師 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 人力資源管理師 | 管理咨詢(xún)師
期貨從業(yè)資格 | 社會(huì)工作者
會(huì)計(jì)職稱(chēng) | 注會(huì)CPA | 經(jīng)濟(jì)師 | 統(tǒng)計(jì)師 | 注冊(cè)稅務(wù)師 | 評(píng)估師 | 精算師 | 高會(huì) | ACCA | 審計(jì)師
法律顧問(wèn) | 會(huì)計(jì)證
一級(jí)建造師 | 二級(jí)建造師 | 造價(jià)師 | 監(jiān)理師 | 安全師 | 咨詢(xún)師 | 結(jié)構(gòu)師 | 建筑師 | 安全評(píng)價(jià)師
房地產(chǎn)估價(jià)師 | 土地估價(jià)師 | 設(shè)備監(jiān)理師 | 巖土工程師 | 質(zhì)量資格 | 房地產(chǎn)經(jīng)紀(jì)人 | 造價(jià)員
投資項(xiàng)目管理 | 土地代理人 | 環(huán)保師 | 環(huán)境影響評(píng)價(jià) | 物業(yè)管理師 | 城市規(guī)劃師 | 公路監(jiān)理師
公路造價(jià)工程師 | 招標(biāo)師
執(zhí)業(yè)護(hù)士 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 衛(wèi)生資格
您現(xiàn)在的位置: 考試吧(Exam8.com) > 軟件水平考試 > 系統(tǒng)分析師 > 正文

Delphi開(kāi)發(fā)中幾種代碼復(fù)用方式及其比較

  我們?cè)谲浖_(kāi)發(fā)中,經(jīng)常會(huì)碰到多處代碼相同或相似的地方,如何處理這種情況,不僅對(duì)個(gè)人,而且對(duì)于一個(gè)團(tuán)隊(duì),是一個(gè)重要的問(wèn)題。代碼復(fù)用的作用也不僅是使得代碼編寫(xiě)簡(jiǎn)單、減少工作量。只討論在一個(gè)只使用delphi作為開(kāi)發(fā)工具的團(tuán)隊(duì)如何有效的進(jìn)行代碼復(fù)用,如何在開(kāi)發(fā)進(jìn)度、軟件維護(hù)之間取得平衡。這里以領(lǐng)導(dǎo)的一次開(kāi)發(fā)作為例子。

  最原始的辦法,復(fù)制、粘貼,不同的地方稍作修改?峙旅總(gè)人都曾經(jīng)使用過(guò)這種方法。這無(wú)疑在寫(xiě)程序時(shí)是最快的方法。不過(guò),其缺點(diǎn)也是明顯的,別的不說(shuō),這種方式阻礙了人的思考,功能確實(shí)完成了,但是錯(cuò)過(guò)了自己提升自己的機(jī)會(huì)。表面看是節(jié)約了時(shí)間,實(shí)際是浪費(fèi)了自己。我當(dāng)年使用這種方法時(shí),總覺(jué)得自己更象一個(gè)泥瓦匠。

  誰(shuí)都會(huì)對(duì)這種方式說(shuō)"不"嗎?問(wèn)題在于我在實(shí)踐中發(fā)現(xiàn),更多的程序員傾向于這樣編程。我不得不強(qiáng)制執(zhí)行一些看起來(lái)是微不足道甚至是不完全正確的的細(xì)節(jié)標(biāo)準(zhǔn),例如:所有的SQL語(yǔ)句必須在DataModal中。大多數(shù)程序員反對(duì)這一條,反對(duì)的理由有很多種,有些不乏道理。不過(guò)更多的是程序員感覺(jué)這樣編程變得繁瑣,感到受到了約束。他們反問(wèn)在Form中直接寫(xiě)sql語(yǔ)句多好,又容易看懂,不需要看程序時(shí)跳來(lái)跳去的。我只好打開(kāi)他們?cè)?jīng)完成的系統(tǒng),使用Find in File 功能,搜索結(jié)果表明同樣的sql語(yǔ)句出現(xiàn)了若干次。如果不有效的解決這個(gè)問(wèn)題,我實(shí)在難以想象如何向程序員灌輸如同業(yè)務(wù)邏輯和界面邏輯分開(kāi)的概念。好在有些程序員開(kāi)始考慮這個(gè)問(wèn)題,他向我提出這樣的方案:把所有的sql語(yǔ)句寫(xiě)在單獨(dú)unit中,供所有的unit調(diào)用。雖然我知道,這樣做只是為了復(fù)用而復(fù)用,但是我仍然鼓勵(lì)這種做法,因?yàn)槟軓?fù)用總比不能復(fù)用強(qiáng),半塊面包總強(qiáng)于沒(méi)有面包。

  使用函數(shù)。我發(fā)現(xiàn)這是大多數(shù)程序員喜歡使用的方法。從面向過(guò)程的程序來(lái)說(shuō),函數(shù)調(diào)用幾乎是唯一的代碼復(fù)用方法了。在開(kāi)發(fā)組討論的過(guò)程中,程序員們也最喜歡使用這種方式作為系統(tǒng)之間的接口。這次開(kāi)發(fā)中終于把權(quán)限、流程和打印系統(tǒng)單獨(dú)分裂出來(lái),由單獨(dú)的程序員開(kāi)發(fā),提供給其他系統(tǒng)調(diào)用。如何調(diào)用?程序員首先想到的就是函數(shù)調(diào)用。確實(shí)函數(shù)調(diào)用也解決了不少的問(wèn)題。

  隨著程序不斷的開(kāi)發(fā),系統(tǒng)的復(fù)雜度也在不斷增加,這時(shí)候以函數(shù)作為接口的方式也顯得越來(lái)越復(fù)雜。以一個(gè)簡(jiǎn)單的例子而言,權(quán)限系統(tǒng)處理操作員管理、系統(tǒng)登陸驗(yàn)證等功能,所以系統(tǒng)都需要當(dāng)前登陸操作員的信息。開(kāi)始是想的比較簡(jiǎn)單,只要知道登陸操作員的id,那么其他相關(guān)信息都可以通過(guò)權(quán)限系統(tǒng)不同的引出函數(shù)來(lái)查詢(xún),但考慮到操作員信息的通用性,而且為其提供若干個(gè)引出函數(shù)就顯得過(guò)于繁瑣。我們?cè)O(shè)計(jì)了一個(gè)操作員類(lèi),每個(gè)系統(tǒng)都有其接口聲明,而具體實(shí)現(xiàn)在權(quán)限系統(tǒng)中。在系統(tǒng)中增加一個(gè)全局操作員對(duì)象,這個(gè)對(duì)象在系統(tǒng)登陸時(shí)創(chuàng)建,記錄了登陸操作員的所有信息。其他系統(tǒng)只要訪問(wèn)這個(gè)全局對(duì)象就能得到登陸操作員的信息,包括其所屬部門(mén),登陸時(shí)間等等。這樣做的好處有

 。1)隱藏了實(shí)現(xiàn)的細(xì)節(jié),不僅隱藏了數(shù)據(jù)庫(kù)設(shè)計(jì),也隱藏了代碼實(shí)現(xiàn)的細(xì)節(jié)。例如后來(lái)由于種種原因,操作員的表結(jié)構(gòu)發(fā)生了變化,而其他系統(tǒng)對(duì)此可以一無(wú)所知。后來(lái)權(quán)限系統(tǒng)也重寫(xiě)了讀取權(quán)限部分,同樣,其他系統(tǒng)也一無(wú)所知,只是感覺(jué)速度變快了。

  (2)模塊之間是松耦合。

  (3)提高程序員的水平。

  最后一點(diǎn)恐怕有人懷疑,我要更多的解釋。在討論如何得到當(dāng)前登陸操作員信息時(shí),開(kāi)始甚至有程序員提出這樣的方法:設(shè)置全局變量操作員編號(hào)變量,讓其他系統(tǒng)利用這個(gè)id直接讀數(shù)據(jù)庫(kù)中得到信息的。

  代碼復(fù)用還有應(yīng)該重要的方面是界面的復(fù)用。一次開(kāi)發(fā)中必然會(huì)有部門(mén)界面使用了相同的元素。這里的代碼復(fù)用主要有三個(gè)手段,框架、控件、窗口繼承。

  還是舉一個(gè)簡(jiǎn)單的例子,這次開(kāi)發(fā)中的部門(mén)是按照樹(shù)型結(jié)構(gòu)來(lái)描述的,很多個(gè)界面上需要出現(xiàn)這個(gè)部門(mén)樹(shù),比如資料管理界面、比如人員管理界面,界面的左邊都是這顆部門(mén)樹(shù)。在不同的界面中又有不同的處理,相應(yīng)不同的事件。這方面,Delphi為我們提供了一個(gè)好的方法:Tframe。我更傾向于認(rèn)為Frame就是一組控件及相關(guān)代碼的集合,雖然在設(shè)計(jì)時(shí)它和Form比較相似。在部門(mén)樹(shù)這個(gè)Frame中,只有一個(gè)Treeview,關(guān)鍵在于它已經(jīng)具備了按照樹(shù)型顯示部門(mén)能力,而且,更進(jìn)一步,你可以在其上面進(jìn)行拖拽來(lái)完成部門(mén)調(diào)整的功能。當(dāng)然對(duì)于不需要這個(gè)功能的窗口,可以簡(jiǎn)單的設(shè)置一個(gè)屬性來(lái)禁止這個(gè)功能。

  框架被程序員了解后得到了大量的使用。大家感到確實(shí)能非常方便的解決很多問(wèn)題。而且,對(duì)于框架的修改會(huì)被所以使用它的窗口有效,不用因?yàn)橐薷哪硞(gè)共同的地方找遍工程中的每個(gè)窗口了。

  在Delphi推出Tframe之前的版本,可以使用窗口來(lái)代替它。其中的區(qū)別不在中討論了。

  控件無(wú)疑是Delphi最令人心動(dòng)的了,在眼花繚亂的無(wú)數(shù)控件面前往往會(huì)迷失?丶涂蚣艿淖饔糜邢嗨频牡胤,不過(guò)普遍認(rèn)為控件更加通用一些,而框架只是用在特定的程序中。如果團(tuán)隊(duì)中擁有擅場(chǎng)于此的高手自然能讓團(tuán)隊(duì)如虎添翼,沒(méi)有也不必黯然神傷,因?yàn)槠胀ǖ目丶帉?xiě)也沒(méi)有想象的那么難。

  同樣舉一個(gè)簡(jiǎn)單的例子。這次開(kāi)發(fā)使用了Ado作為數(shù)據(jù)聯(lián)接,adoDataset有sort屬性,可以完成本地排序的功能。大家知道許多優(yōu)秀的Dbgrid控件都能實(shí)現(xiàn)點(diǎn)擊標(biāo)題欄自動(dòng)排序的功能。我們也做了一個(gè)增強(qiáng)的dbgrid來(lái)實(shí)現(xiàn)這個(gè)功能,利用ado的特性,非常簡(jiǎn)單,幾句代碼就可以了。當(dāng)然還有其他增強(qiáng),來(lái)適應(yīng)這個(gè)專(zhuān)業(yè)系統(tǒng)的其他方面。

轉(zhuǎn)帖于:軟件水平考試_考試吧
文章搜索
Delphi開(kāi)發(fā)中幾種代碼復(fù)用方式及其比較網(wǎng)友評(píng)論網(wǎng)友評(píng)論
版權(quán)聲明 --------------------------------------------------------------------------------------
    如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請(qǐng)注明出處。
 gaoxiaoliang