2013-09-30 33 views
2

雖然將一些應用程序從Delphi XE2移動到XE5,但我注意到列出了不再需要的許多單元。在界面中使用什麼命令?

這進而導致我在整理使用接口這導致了我的問題部分。

是否有推薦的接口單元順序?我知道他們被加載反向命令,但我應該由Usnit Scope組織它們。例如MyCompany。 *在開始或結束時列出?我應該把Vcl。 *之前系統。 *

更新

一般來說,我會包括我在實施單位,而不是接口。我更深入地瞭解是否有一個層次結構德爾福自己的單位...

例如,我遇到了一個問題,其中列出Windows單元之前 System.SysUtils更改所使用的DeleteFile的版本.. 。

明確的問題

應該使用的順序是

WINAPI *,系統*,Vcl的。*,或者相反?

+4

*我知道他們是以相反的順序加載*。你以爲你知道,但你錯了。他們按順序處理。如果有名稱衝突,則最後導入的勝者。我總是列出使用低級的第一,高級的最後。所以,首先是RTL,然後是VCL,然後是你的單位。而你的代碼肯定會有層次結構。也尊重這一點。但是,你需要確定你想要遵循的規則。如果我們不知道訂單更改對代碼庫的影響,我們該如何回答? –

+0

大衛 - 這就是我試圖問的問題:-) –

回答

4

有與應用列表重構相關的一些風險:

  • 以後使用單位將覆蓋使用較早(作用域)單位符號(methodsclassesvarsconsts,...)。

    這可以引入(或多或少)sublte錯誤到你的程序中。

  • 重排序單元可以更改運行段落的順序,其中intializationfinalization段落。

也有一些優點:

  • 更快編譯速度

  • 小的可執行文件(僅當任何除去單元具有initializationfinalization

  • 避免/預防用途圓圈(儘管使用圓圈常常是次優OOP設計的標誌)

說了這麼多,你的問題,更新後:

我傾向於這樣做,大衛已經寫了同樣的事情:順序從低層次向高層次的單位。

有些工具可以幫助您找到未使用的單位,並按照最佳順序排列使用的單位。 (Peganza Icarus/PascalAnalyzerModelMaker

很難說什麼編譯器確實(特別是因爲現在有多種編譯器),但用最少的依賴關係把單位首先應使編譯器更容易建立依賴關係樹。

+0

爲了去除未使用的單位,cnPack也有一個很好的自動工具。儘管我喜歡Pascal Analyzer告訴你哪些單元可以從接口切換到實現的方式。 – Alister

相關問題