我的Delphi开发经验谈(转)
生活随笔
收集整理的這篇文章主要介紹了
我的Delphi开发经验谈(转)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
--2010年09月28日 星期二 下午 05:26
| 我的Delphi開發(fā)經(jīng)驗(yàn)談 -------- 開發(fā)環(huán)境 -------- Delphi 7是一個(gè)很經(jīng)典的版本,在Win2000/XP下推薦安裝Delphi 7來(lái)開發(fā)軟件,在Vista下推薦使用Delphi 2007開發(fā)軟件。安裝好Delphi 7后,應(yīng)立即安裝Delphi 7 Update Pack 1,Delphi 2007則建議盡量安裝最新的版本。工欲善其事,必先利其器,為了提升開發(fā)效率,為了能更加得心應(yīng)手的處理接下來(lái)的開發(fā)工作,我們有必要安裝一些有用的開發(fā)輔助工具(Delphi將此類插件以Expert命名)。首先推薦的是DelForExp這個(gè)源代碼格式化工具,集成在IDE里,使用相當(dāng)方便。即使我所寫代碼的風(fēng)格非常好,但是還是免不了閱讀某些人寫的亂七八糟的代碼,這時(shí)DelForExp就能派上用場(chǎng)了,1秒鐘就能讓代碼能看上去順眼多了。GExperts曾經(jīng)是一個(gè)非常出名的工具,可現(xiàn)在都不怎么更新了,里面有幾個(gè)功能還是值得一用,比如Grep Search, Replace Components, Code Proofreader等。強(qiáng)烈推薦安裝CnPack IDE 專家包,相信我,它會(huì)讓你的Delphi更好用。Delphi 7是不支持重構(gòu)的,因此我還建議安裝Castalia,這個(gè)工具中某些功能還是很不錯(cuò)的。CodeRush一直都是Delphi下最強(qiáng)大的工具,可是由于安裝后比較容易與其他工具沖突,讓人不得不忍痛割愛。Delphi 7下建議安裝Delphi SpeedUp這個(gè)IDE加速工具,其原理是在Delphi啟動(dòng)前,替換RTL的函數(shù)為來(lái)自FastCode工程的執(zhí)行效率更高的函數(shù)。ModelMaker Code Explorer為Delphi增加了一些方便重構(gòu)代碼的功能,值得安裝使用。 第一次啟動(dòng)Delphi 7,關(guān)閉設(shè)置中的Delphi Direct以禁止Delphi訪問Borland服務(wù)器,勾選Show Compiler Progress選項(xiàng)以便編譯程序時(shí)可以看見編譯進(jìn)度,然后分別設(shè)置所安裝的專家的選項(xiàng),再對(duì)Delphi的窗體布局按自己的喜好調(diào)整,調(diào)整好了然后將其保存為默認(rèn)布局。關(guān)閉工程,設(shè)置好默認(rèn)的工程選項(xiàng)。接下來(lái)就可以安裝控件包了。如果是在項(xiàng)目小組中配置開發(fā)環(huán)境,因?yàn)榭赡芩璧目丶容^多,安裝比較麻煩,建議由一個(gè)有經(jīng)驗(yàn)的開發(fā)人員將那些散裝控件預(yù)編譯后做成安裝程序供小組其他成員安裝。 -------- 軟件設(shè)計(jì) -------- 在整理自己的思路的時(shí)候可以采用PersonalBrain來(lái)畫思維導(dǎo)圖,這是一個(gè)拓展腦力,激發(fā)思維的一個(gè)活動(dòng),并且將自己的想法全部記錄下來(lái),并在整理的過程當(dāng)中可以發(fā)現(xiàn)內(nèi)在聯(lián)系與更多的問題,在接下來(lái)的設(shè)計(jì)中加以考慮。做設(shè)計(jì)需要畫圖,除了Visio外,我推薦EDraw Soft Diagrammer。Enterprise Architect用來(lái)做UML設(shè)計(jì)是很好的選擇。ModelMaker為Delphi增加UML支持,可以保持設(shè)計(jì)與代碼雙向同步,非常不錯(cuò)的工具。 作為一個(gè)Delphi產(chǎn)品的設(shè)計(jì)人員,應(yīng)該具有廣闊的視野,熟悉.NET、Java下優(yōu)秀的框架設(shè)計(jì),熟悉Delphi類庫(kù)的源代碼,其中總有我們可以借鑒與學(xué)習(xí)的地方,根據(jù)公司的實(shí)際情況以及具體需求有選擇的在產(chǎn)品開發(fā)中進(jìn)行實(shí)踐,這樣才能做出高質(zhì)量的產(chǎn)品。 -------- 軟件開發(fā) -------- 數(shù)據(jù)結(jié)構(gòu)是軟件開發(fā)中的基礎(chǔ),在開發(fā)項(xiàng)目前,你一定應(yīng)該準(zhǔn)備好如TStack, THashtable, TQueue, TCollection, TMap, TBag, TSet, TAssociation之類的容器類,然后在以后的開發(fā)中根據(jù)需要選用合適的數(shù)據(jù)結(jié)構(gòu),避免不要直接使用指針與TList。如有需要,可以先將TStream,TRegistry等常用類繼承實(shí)現(xiàn),也就是做一個(gè)包裝,這樣就為以后的開發(fā)中就留下了一個(gè)可以隨時(shí)加入擴(kuò)展的接口。 網(wǎng)上也能找到DGL(The Delphi Generic Library)來(lái)為Delphi增加泛型支持,實(shí)際上也可以稱之為一個(gè)模板庫(kù),但是這個(gè)庫(kù)我也只使用過一次,網(wǎng)上也未見其他人使用,因此到底是否可靠還有待于實(shí)踐驗(yàn)證。說到模板庫(kù),我還想起一個(gè)DEEX,這是一個(gè)預(yù)處理器,可以讓你使用類似STL相似的語(yǔ)法,其中也內(nèi)置了DTL(Delphi Template Library)庫(kù)。 關(guān)于AOP,Delphi這方面完全不能與Java或.NET相比,所能用的技術(shù)也就只能是動(dòng)態(tài)代理或Hook來(lái)實(shí)現(xiàn),雖然也出現(xiàn)了MeAOP之類的框架,我還是建議從設(shè)計(jì)上去解決這類AOP的需求,或者也可以考慮采用在DailyBuild的時(shí)候做編譯前預(yù)處理(比如設(shè)計(jì)成{LogAction}類似于.NET的屬性特性來(lái)修飾特定的方法,當(dāng)然預(yù)處理器必須自己開發(fā))。 與開發(fā)有關(guān)的文件都應(yīng)該被管理起來(lái),而不僅僅是只管理代碼,一開始就要做好目錄規(guī)劃,特別要注意將代碼與運(yùn)行時(shí)所需的資源分隔開,一般來(lái)說,可以分為Doc,Src,Res,Misc四大類,Doc存放全部相關(guān)的文檔,里面建立具體的分類目錄;Src存放編譯所需的文件,比如源代碼和幫助的源文件;Res存放制作安裝包與發(fā)布軟件所需的各種資源文件,比如圖片、網(wǎng)頁(yè)等。這樣做將為接下來(lái)的DailyBuild做好準(zhǔn)備。 Delphi沒有Package與Namespace的概念,因此只能利用目錄上的物理劃分代替邏輯劃分,將同一性質(zhì)的單元放置到同一目錄,根據(jù)需要再劃分更多子目錄來(lái)存放單元。 程序的界面上的控件最好都重新規(guī)范命名,切忌在代碼中出現(xiàn)類似Label1.txt := 'abc';之類的代碼。開發(fā)者應(yīng)該熟悉Delphi所提供的系統(tǒng)函數(shù),切忌自己去實(shí)現(xiàn)Delphi已經(jīng)提供了的函數(shù),一則這樣做的效率不高,二則你自己所寫的代碼沒有經(jīng)過完全的測(cè)試,很有可能存在未妥善處理的情況。我們不提倡重復(fù)發(fā)明輪子,特別是在正式的開發(fā)中這樣做。開發(fā)中把握面向?qū)ο笤O(shè)計(jì)的原則:單一職責(zé)、開放封閉、里氏替換、依賴倒置、接口隔離、高內(nèi)聚低耦合。代碼就是最好的注釋,變量命名盡可能的表達(dá)其本身的意義,最好的注釋就是不需要注釋也能很容易的看懂代碼,只在需要的地方加上注釋。開發(fā)人員應(yīng)該將自己所寫的代碼視之為供別人使用的產(chǎn)品,不要隨意的將方法聲明為公開方法,只提供給別人需要的方法,每個(gè)公用方法上都應(yīng)該用注釋標(biāo)明其功能。程序編譯過程中出現(xiàn)的任何警告或提示都應(yīng)該認(rèn)真對(duì)待,爭(zhēng)取消除每一個(gè)警告或提示,這樣做是避免一些代碼中可能存在的隱患。 有經(jīng)驗(yàn)的程序員完成特定的功能會(huì)充分考慮可變的情況,將這些地方提取出來(lái),定義為方法參數(shù)或者從配置文件中讀取,這樣即使需求發(fā)生變化,也能輕松應(yīng)對(duì)。要寫出易維護(hù)的程序應(yīng)該在軟件配置化和程序動(dòng)態(tài)化上下功夫。特別提一提程序動(dòng)態(tài)化,現(xiàn)在開發(fā)網(wǎng)絡(luò)游戲的很多,而且一般都會(huì)用到腳本引擎Lua來(lái)實(shí)現(xiàn)部分邏輯,這樣在開發(fā)后期的調(diào)整相對(duì)變得輕松一點(diǎn),以后在服務(wù)器上做修改也不會(huì)要求重新啟動(dòng)程序。當(dāng)然在一般的項(xiàng)目或產(chǎn)品中一樣可以考慮使用腳本引擎,當(dāng)然不一定要用Lua,還可以有很多別的選擇。比如:DelphiWebScript,RemObjects Pascal Script,AUTOMA atPASCAL SCRIPTER,FastScript,Innerfuse Pascal Script。如果還有更高的要求,還可以考慮利用COCO/R (ParserBuilder)來(lái)實(shí)現(xiàn)自己的語(yǔ)法解析器。 開發(fā)中通常會(huì)遇到自己不能解決的問題,要知道你遇到的問題別人可能早就遇到過并解決,因此請(qǐng)教他人或者請(qǐng)教Google通常是最好的選擇。上論壇提問是沒有效率的方法。本地的知識(shí)庫(kù)也能派上用場(chǎng),比如www.delphi3000.com的離線庫(kù)CodeFinder,大富翁離線資料庫(kù), -------- 控件開發(fā) -------- 控件分為不可視控件與可視控件,不可視控件其實(shí)與一般的類沒什么太大的區(qū)別,只需要公布需要公布的屬性為Published,如有需要也可以設(shè)計(jì)并注冊(cè)自己的屬性編輯器。 開發(fā)控件也有專業(yè)的開發(fā)工具Eagle CDK和Eagle reAct,您不僅可以很方便的創(chuàng)建類,還可以在運(yùn)行期測(cè)試控件,可以很方便的修改屬性,即時(shí)看到效果,大大提高了開發(fā)效率。 -------- 軟件破解 -------- 愈來(lái)愈多的開發(fā)者開始采用RSA來(lái)作為注冊(cè)的加密算法,效果還算不錯(cuò),雖然仍不能防止被爆破,但是至少不會(huì)出現(xiàn)(內(nèi)存)注冊(cè)機(jī)。對(duì)軟件加殼也不是什么防彈衣,對(duì)于有經(jīng)驗(yàn)的破解者幾分鐘就可以用OllyDbg從內(nèi)存Dump(先用Process Explorer殺掉屏蔽調(diào)試工具的線程),接著就是用Import REConstructor修復(fù)IAT,再用Lord PE對(duì)EXE進(jìn)行優(yōu)化。 DeDe可以讓破解者看到程序內(nèi)的資源,事件,既可以靜態(tài)分析,也可以在OllyDbg中對(duì)分析出的地址進(jìn)行動(dòng)態(tài)調(diào)試。 破解Delphi控件當(dāng)然也可以用DeDe,但是我們有更好的選擇,那就是DCUcu與Dcu2Pas,可以將Dcu直接反編譯成匯編代碼,通過靜態(tài)分析其中的字符串以及調(diào)用的API,破解真的是很容易。 只有做到知己知彼,才能做到有的放矢,反破解就是做到以最小的保護(hù)代價(jià)來(lái)使得破解者付出極大的破解行動(dòng)。 -------- 版本控制 -------- 版本控制最流行的就是VSS, CVS, SVN,我比較喜歡SVN,但是由于在Delphi下始終沒有很方便的連接SVN的插件,因此,仍然是Delphi+VSS是最方便的版本控制的選擇。VssConneXion是專門用于為Delphi增加VSS支持的插件,確實(shí)為開發(fā)人員帶來(lái)了無(wú)比的便利。Delphi+TortoiseCVS與Delphi+TortoiseSVN同樣也是不錯(cuò)的選擇。VSS最大的缺點(diǎn)就是只能在內(nèi)網(wǎng)中使用,除了可以透過VPN來(lái)允許遠(yuǎn)程訪問外,我們還可以用Dynamsoft SourceAnyWhere或SourceOffSite實(shí)現(xiàn)VSS通過Internet訪問。當(dāng)然VSS 2005也支持Internet訪問。如果你是個(gè)人開發(fā)者,覺得使用VSS也太麻煩,不妨試試FileHamster。 -------- 軟件測(cè)試 -------- 在提交給測(cè)試人員前,要求開發(fā)人員首先做自測(cè),不要出現(xiàn)給測(cè)試人員的是一個(gè)都不能運(yùn)行的版本,這樣是對(duì)測(cè)試人員的不尊重。 Java有JUnit,.Net有NUnit,同樣Delphi也有DUnit,這主要是用來(lái)做單元測(cè)試用的,特別是在不停的代碼重構(gòu)中,能夠及時(shí)發(fā)現(xiàn)修改出的問題,是每日構(gòu)建中的重要組成部分。開發(fā)人員在完成功能前就寫好測(cè)試用例代碼,也稱之為測(cè)試驅(qū)動(dòng)開發(fā),讓自己作為自己代碼的第一個(gè)用戶,以確保自己提交的代碼是易用的、正確的;讓測(cè)試人員更專注于發(fā)現(xiàn)那些隱藏的邏輯性錯(cuò)誤。 TestComplete是AutomatedQA出品的專業(yè)自動(dòng)化測(cè)試工具,與Rational Robot和Mercury WinRunner相比,特別適合用于Delphi開發(fā)的程序的測(cè)試。自動(dòng)化測(cè)試可以減輕測(cè)試人員的工作量,提高他們的測(cè)試效率。當(dāng)然,采用自動(dòng)化測(cè)試對(duì)于測(cè)試人員的要求就更高了,因?yàn)樾枰獪y(cè)試人員維護(hù)測(cè)試腳本。 -------- 缺陷管理 -------- 測(cè)試人員的報(bào)告需要反饋給開發(fā)者,同時(shí)又要知道開發(fā)者的修改意見,上級(jí)主管需要知道當(dāng)前的測(cè)試進(jìn)度與修改情況,這一切都是需要缺陷管理系統(tǒng)所管理的。通常缺陷管理都是做成B/S系統(tǒng),當(dāng)然也有提供客戶端的。JIRA, Mantis, Bugzilla, Axosoft OnTime, Axosoft PowerTrack, Bug Tracker, BugFree, Dev Hound, SourceGear Dragnet, TestTrack Pro, URTracker,同樣有很多選擇。 -------- 內(nèi)存泄漏 -------- Java與.NET自身有垃圾回收機(jī)制,而且沒有指針,除了外部資源(數(shù)據(jù)連接,文件等)需要使用完關(guān)閉,讓開發(fā)人員是不需要主動(dòng)管理內(nèi)存釋放的,Delphi卻是需要自己管理對(duì)象的創(chuàng)建與釋放(Create and Free, New and Dispose, GetMem and FreeMem),在這一點(diǎn)上有些初學(xué)者往往不太注意,應(yīng)堅(jiān)持誰(shuí)創(chuàng)建誰(shuí)負(fù)責(zé)釋放的原則。雖然Delphi下沒有垃圾回收機(jī)制,但是有工具可以幫助我們檢查內(nèi)存泄漏。 MemProof就是一款專門用來(lái)檢查內(nèi)存等資源分配情況的軟件。作者Atanas Stoyanov后來(lái)加入了AutomatedQA公司。 AQtime是AutomatedQA出品的專業(yè)的測(cè)試軟件,包括性能分析,內(nèi)存與資源分配情況,最有用的當(dāng)然是性能分析與內(nèi)存泄漏檢測(cè)。 Fast Memory Manager,一款優(yōu)秀的內(nèi)存管理器,Delphi 2006以后就采用FMM替換了BorlandMM,Delphi 7下也可以加掛FMM來(lái)提升程序運(yùn)行性能。同時(shí)FMM也是一個(gè)絕佳的內(nèi)存泄漏測(cè)試工具。 推薦引入FMM到工程,在開發(fā)過程中盡早的發(fā)現(xiàn)并解決內(nèi)存泄漏問題,是比較理想的解決辦法。 -------- 錯(cuò)誤定位 -------- 測(cè)試人員在錯(cuò)誤追蹤系統(tǒng)上提出了測(cè)試出來(lái)的錯(cuò)誤,開發(fā)人員就要進(jìn)行針對(duì)解決,首先就會(huì)遇到如何定位一些復(fù)雜的錯(cuò)誤。 首先就是打斷點(diǎn)在Delphi里跟蹤調(diào)試運(yùn)行,如果是在線程里或是不能跟蹤調(diào)試的情況下,可以使用OutputDebugString進(jìn)行跟蹤輸出,然后在View->Debug Windows->Event Log里查看。CodeSite是一款讓開發(fā)者可以很方便的調(diào)試工具,特別是支持遠(yuǎn)程輸出。此外還有小巧并且開源的Overseer也是不錯(cuò)的調(diào)試工具。JEDI Code Library里的Debug單元功能同樣強(qiáng)大。 AV錯(cuò)誤是Delphi中比較常見的未知錯(cuò)誤。通常可以掛接Application.OnException,來(lái)自己處理所有的異常錯(cuò)誤。在這方面,有專業(yè)的軟件可以幫助我們處理異常,EurekaLog就是一款專業(yè)的異常處理軟件,可以告訴我們非常詳細(xì)的錯(cuò)誤信息,使得定位錯(cuò)誤變得更輕松。madCollection里的madExcept也是一款非常強(qiáng)的異常處理軟件, -------- 制作安裝 -------- Inno Setup與NSIS都是免費(fèi)的,功能強(qiáng)大的專業(yè)安裝制作軟件,Inno Setup是Delphi開發(fā)的,因此特別適合Delphi開發(fā)的產(chǎn)品的安裝程序制作。NSIS比較適合C開發(fā)的產(chǎn)品的安裝程序制作。推薦Inno Setup + ISSI (Inno Setup Script Includes) + ISTool來(lái)制作安裝程序。 -------- 每日構(gòu)建 -------- 如果一個(gè)公司還是采用手工方式編譯發(fā)布軟件,那一定會(huì)出問題,比如將某個(gè)中文文件打包到英文版里發(fā)布出去,比如發(fā)布的軟件的版本并非最終的版本。 為了確保軟件發(fā)布的穩(wěn)定性,不管大小公司都應(yīng)該制定一套軟件發(fā)布流程,并用工具來(lái)固化這個(gè)流程。 流程首先是從版本控制軟件獲取最新或特定版本的代碼以及資源,對(duì)代碼以及資源做必要的預(yù)處理(比如修改版本號(hào),自動(dòng)代碼審查),編譯代碼,編譯資源(例如幫助),編譯中出現(xiàn)錯(cuò)誤自動(dòng)反饋(比如發(fā)送郵件),編譯成功后自動(dòng)進(jìn)行單元測(cè)試(測(cè)試失敗也會(huì)自動(dòng)反饋;編譯成功但是出現(xiàn)的警告與提示也應(yīng)自動(dòng)反饋),測(cè)試通過后制作安裝程序,發(fā)布軟件(比如上傳到某個(gè)FTP,復(fù)制到某個(gè)目錄)。這些流程很繁瑣,如果由人來(lái)執(zhí)行是不可靠的,所以要由軟件來(lái)實(shí)現(xiàn)這個(gè)流程。 代碼審查:檢查代碼中是否存在不符合事先約定的代碼規(guī)范的動(dòng)作。比如.NET下的FxCop就是用來(lái)做代碼審查。在Delphi中需要自己實(shí)現(xiàn)審查器,加上利用正則表達(dá)式定義的代碼審查規(guī)則(比如控件命名是否規(guī)范,窗體上是否使用的英文字體,公用方法上是否標(biāo)有注釋等)。代碼審查用人工實(shí)現(xiàn)是沒有效率的,同時(shí)也是不可靠的,利用DailyBuild來(lái)實(shí)現(xiàn)自動(dòng)代碼審查能夠保證代碼質(zhì)量,甚至于提前發(fā)現(xiàn)代碼中的隱患。 可以用腳本實(shí)現(xiàn)每日構(gòu)建:比如Perl, PowerShell, 批處理等,當(dāng)然只適合一些簡(jiǎn)單場(chǎng)合,而且對(duì)于維護(hù)腳本的人員的要求也相對(duì)較高。 Java有Ant,.NET有Nant,同樣Delphi有Want(為什么叫Want而非Dant,原來(lái)Want是取Windows Ant之意,雖然Kylix可以在Linux運(yùn)行,Free Pascal可以在更多的平臺(tái)下運(yùn)行,但是想到Want是一個(gè)命令行工具,want clean, want compile, want build,看起來(lái)很不錯(cuò),于是作者還是決定用Want), Want是用XML作為配置文件,維護(hù)起來(lái)稍微有點(diǎn)麻煩,不過維護(hù)好XML以后執(zhí)行構(gòu)建的時(shí)候有WantUI界面可以使用,還算挺方便的。 FinalBuilder,一個(gè)完全的圖形化構(gòu)建工具,支持腳本,很好用,支持的工具也很多,唯一的缺點(diǎn)就是這是一個(gè)收費(fèi)軟件。 Visual Build Professional,同樣是一個(gè)可視化的構(gòu)建工具,也支持腳本,支持宏,還支持虛擬機(jī),同樣也是一個(gè)收費(fèi)軟件。 -------- 網(wǎng)絡(luò)資源 -------- http://www.torry.net上有很多的Delphi資源,里面有不少優(yōu)秀的免費(fèi)控件與代碼。 隨著時(shí)間的流逝,我們手上應(yīng)該積累了很多的開發(fā)資源,比如電子書、文章、源碼、開發(fā)工具等等,應(yīng)該將其準(zhǔn)確命名并分類存放于不同的目錄中,如果體積太大,可以刻錄成光盤并用WhereIsIt編目后妥善保管。像那些比較零散的文章、代碼等,可以考慮使用一個(gè)文檔管理軟件管理起來(lái),比如MyBase、EverNote等。管理的知識(shí)可以與他人分享交流,共同學(xué)習(xí)提高。 -------- 其他補(bǔ)充 -------- JEDI Project:JEDI Code Library 和 JEDI VCL 是Delphi下最大的兩個(gè)開放源代碼的工程,值得好好研究。 KOL+MCK:VCL的確很方便,可是代價(jià)便是程序體積的增加,KOL(Key Objects Library)+MCK(Mirror Classes Kit)便是VCL的一個(gè)替代品。 DWPL(The Delphi WDosX Project Library):讓Delphi編譯的Console程序能夠運(yùn)行在DOS下。換句話說就是開發(fā)32位的DOS程序,用Turbo/Borland Pascal開發(fā)的是16位程序。 Free Pascal/Lazarus:Free Pascal是一個(gè)32位的編譯器,并且支持多平臺(tái),也可以算是Delphi的一個(gè)近親,另外一個(gè)是TMT Pascal。Lazarus則是一個(gè)Free Pascal的集成開發(fā)環(huán)境,界面類似Delphi。 |
轉(zhuǎn)載于:https://www.cnblogs.com/cnajian/archive/2011/03/07/1973407.html
總結(jié)
以上是生活随笔為你收集整理的我的Delphi开发经验谈(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Muduo 网络编程示例之四:Twist
- 下一篇: AutoScan-收集监视及办理器械