2009-02-14 39 views
20

經過多年的Delphi程序編碼,形成包含全局變量的表單和數據模塊中的不可測代碼,唯一的類是表單本身,包含我需要的所有代碼爲表單UI本身。如何重構僅使用表單和數據模塊的Delphi程序

我該如何將代碼轉換爲一組執行實際工作的類?我是否需要停止使用數據源/數據集並在類中完成所有任務?我需要一個ORM嗎?

通常有需要重用表單中的代碼,所以將邏輯轉換爲類是否合理?

回答

27

如果我遇到一個表格(或其他類)與太多的責任,我usualy遵循的模式如下:

  1. 定義一個新的邏輯類。
  2. 在窗體中創建新類的成員變量。
  3. 在onCreate中創建類並將其釋放到表單的onDestroy中。
  4. 將單個邏輯(例如變量)移動到新類中。
  5. 移動或創建所有方法到新的類。
  6. 編譯和測試。
  7. 繼續,直到所有邏輯被放入新類。
  8. 嘗試從表單類中分離邏輯類。 (如果你喜歡,你甚至可以使用接口)。

有些情況下單個類是不夠的,所以創建更多的類是沒有問題的。這些類可以有其他的類。

通過這些步驟,您可以解決大多數這些問題。

+8

好的步驟,但一個提示:對於最小耦合可能不要通過任何視覺控制到你的新類。如果你這樣做,那麼你就限制了你更換UI控件的能力。如果您必須通過可視化控件(特別是網格等),則將其全部隔離在另一個類中,而不使用業務邏輯。 – 2009-02-16 08:46:39

+0

我同意,可見的控件是表單的責任。可以使用框架,但我不太喜歡它們的生產代碼。 – 2009-04-23 08:16:15

8

首先,我強烈推薦閱讀Martin Fowler的書Refactoring

這會讓您真正瞭解如何最好地合理地將改變引入到現有(非OO)代碼以提高可維護性。

我不會看ORM,除非您清楚瞭解將爲您的應用程序帶來哪些好處(如果有)。

1

後明白你需要refactory你的代碼是什麼,如果你想要一個OPF/ORM,我建議Jazz SDK

4

另一本我可以高度強烈推薦的書 - 我個人認爲比福勒的「通用」重構書更適合 - 是"Working Effectively with Legacy Code" by Michael Feathers。它確實展示了你在做這類工作時會遇到的主要顛簸。哦,並且:重構遺留代碼在你的心靈上可能非常困難。我希望你能處理挫敗感......我喜歡這句話(不記得我從哪裏得到它):「上帝能夠在6天內創造世界,只是因爲沒有任何遺留代碼」。祝你好運。 )

5

我已經encoured問題像這樣一個應用程序,我開始做如下:

  1. 定義主類中的代碼最一般的邏輯。
  2. 在每個表單中,將處理事件內部的業務邏輯的代碼作爲該形式的函數/過程移動。
  3. 然後將這些函數/過程移至這些類,如靜態方法
  4. 最後僅在驗證UI等窗體內創建所需的代碼,並調用類。
  5. 對於全局變量,儘可能地儘量省略,並將值作爲參數傳遞給方法。

我使用了靜態方法,因爲它更容易從事件中刪除代碼,只需調用它們而無需爲每個操作創建/釋放對象。原始設計的目的不是將表單與業務邏輯代碼分開。

最終的應用程序並不是完整的面向對象,但它至少可以更容易地測試方法,而無需像以前那樣與表單和事件進行交互。

有時您會覺得如果您從頭開始重新設計應用程序,那麼將比進行更改以使其成爲真正的OO設計更容易。

4

導入Modelmaker是我面對現有Delphi項目時的第一步。 MM將幫助您重構你的代碼,因爲:

  • 圖形代表所有類,方法,變量等
  • 它是在Delphi IDE非常緊密集成(主菜單,彈出菜單, 單獨Modelmaker資源管理器, 工具欄,鍵盤快捷鍵)。這 集成允許您快速 執行必要的操作,而不 離開IDE
  • 它有一個專門的「重構」模塊讓您能夠快速創建,移動 而不必擔心改變 重命名類和變量底層代碼爲 。 Modelmaker將 自動更改名稱和 參考所有單位。

Modelmaker的基本功能很容易學習。模型製造者就像任何其他優秀的生產力工具一樣 - 你投入的越多,你越容易擺脫它。 Modelmaker不是免費的,但可以輕鬆地提高生產力。 我還沒有找到更好的工具來重構遺留的Delphi代碼。他們提供免費試用版和一些體面的教程電影。 給模型製作者一個嘗試,祝你好運...

相關問題