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