經過多年的Delphi程序編碼,形成包含全局變量的表單和數據模塊中的不可測代碼,唯一的類是表單本身,包含我需要的所有代碼爲表單UI本身。如何重構僅使用表單和數據模塊的Delphi程序
我該如何將代碼轉換爲一組執行實際工作的類?我是否需要停止使用數據源/數據集並在類中完成所有任務?我需要一個ORM嗎?
通常有零需要重用表單中的代碼,所以將邏輯轉換爲類是否合理?
經過多年的Delphi程序編碼,形成包含全局變量的表單和數據模塊中的不可測代碼,唯一的類是表單本身,包含我需要的所有代碼爲表單UI本身。如何重構僅使用表單和數據模塊的Delphi程序
我該如何將代碼轉換爲一組執行實際工作的類?我是否需要停止使用數據源/數據集並在類中完成所有任務?我需要一個ORM嗎?
通常有零需要重用表單中的代碼,所以將邏輯轉換爲類是否合理?
如果我遇到一個表格(或其他類)與太多的責任,我usualy遵循的模式如下:
有些情況下單個類是不夠的,所以創建更多的類是沒有問題的。這些類可以有其他的類。
通過這些步驟,您可以解決大多數這些問題。
首先,我強烈推薦閱讀Martin Fowler的書Refactoring。
這會讓您真正瞭解如何最好地合理地將改變引入到現有(非OO)代碼以提高可維護性。
我不會看ORM,除非您清楚瞭解將爲您的應用程序帶來哪些好處(如果有)。
後明白你需要refactory你的代碼是什麼,如果你想要一個OPF/ORM,我建議Jazz SDK
另一本我可以高度強烈推薦的書 - 我個人認爲比福勒的「通用」重構書更適合 - 是"Working Effectively with Legacy Code" by Michael Feathers。它確實展示了你在做這類工作時會遇到的主要顛簸。哦,並且:重構遺留代碼在你的心靈上可能非常困難。我希望你能處理挫敗感......我喜歡這句話(不記得我從哪裏得到它):「上帝能夠在6天內創造世界,只是因爲沒有任何遺留代碼」。祝你好運。 )
我已經encoured問題像這樣一個應用程序,我開始做如下:
我使用了靜態方法,因爲它更容易從事件中刪除代碼,只需調用它們而無需爲每個操作創建/釋放對象。原始設計的目的不是將表單與業務邏輯代碼分開。
最終的應用程序並不是完整的面向對象,但它至少可以更容易地測試方法,而無需像以前那樣與表單和事件進行交互。
有時您會覺得如果您從頭開始重新設計應用程序,那麼將比進行更改以使其成爲真正的OO設計更容易。
導入Modelmaker是我面對現有Delphi項目時的第一步。 MM將幫助您重構你的代碼,因爲:
Modelmaker的基本功能很容易學習。模型製造者就像任何其他優秀的生產力工具一樣 - 你投入的越多,你越容易擺脫它。 Modelmaker不是免費的,但可以輕鬆地提高生產力。 我還沒有找到更好的工具來重構遺留的Delphi代碼。他們提供免費試用版和一些體面的教程電影。 給模型製作者一個嘗試,祝你好運...
好的步驟,但一個提示:對於最小耦合可能不要通過任何視覺控制到你的新類。如果你這樣做,那麼你就限制了你更換UI控件的能力。如果您必須通過可視化控件(特別是網格等),則將其全部隔離在另一個類中,而不使用業務邏輯。 – 2009-02-16 08:46:39
我同意,可見的控件是表單的責任。可以使用框架,但我不太喜歡它們的生產代碼。 – 2009-04-23 08:16:15