如何/仅使用表单和数据模块重构Delphi程序

时间:2009-02-14 17:04:58

标签: delphi unit-testing oop refactoring datamodel

经过多年将Delphi程序编码为表单和数据模块中不可测试的代码(包括全局变量),唯一的类就是表单本身,包含表单UI本身所需的所有代码。

如何将代码转换为一组执行实际工作的类?我是否需要停止使用数据源/数据集并在类中执行所有操作?我需要ORM吗?

通常需要在表单中重用代码,因此将逻辑转换为类是否有意义?

6 个答案:

答案 0 :(得分:28)

如果我遇到责任过多的表格(或其他类别),我通常会遵循以下模式:

  1. 为逻辑定义一个新类。
  2. 在表单中创建新类的成员变量。
  3. 在onCreate中创建类,并在表单的onDestroy中释放它。
  4. 将单个逻辑(例如变量)移动到新类。
  5. 将所有方法移动或创建到新类。
  6. 编译并测试。
  7. 继续,直到所有逻辑都放入新班级。
  8. 尝试将逻辑类与表单类分离。 (如果愿意,您甚至可以使用接口。)
  9. 有些情况下单个类是不够的,因此创建更多类没有问题。这些类可以有其他类。

    通过这些步骤,您可以解决大部分问题。

答案 1 :(得分:8)

首先,我强烈建议您阅读Martin Fowler撰写的书Refactoring

这将使您真正了解如何以最佳方式明智地引入对现有(非OO)代码的更改以提高可维护性。

在您明确了解将为您的申请带来哪些好处(如果有的话)之前,我不会查看ORM。

答案 2 :(得分:5)

我在一个应用程序中遇到过这样的问题,我开始做以下事情:

  1. 为代码中的大多数通用逻辑定义主类。
  2. 在每个表单中,将处理事件内业务逻辑的代码移动为该表单中的函数/过程。
  3. 然后将这些函数/过程作为静态方法
  4. 移动到这些类
  5. 最后只在验证用户界面中调用所需的代码,并调用类。
  6. 对于全局变量,尽可能省略,只需将值作为参数传递给方法。
  7. 我使用了静态方法,因为您更容易从事件中删除代码,只需调用它们而不需要为每个操作创建/ Free对象。原始设计并非旨在将表单与业务逻辑代码分开。

    最终的应用程序并不是完整的OO,但最不容易测试方法而不需要像之前那样与表单和事件进行交互。

    有时你觉得如果你从头开始重新设计应用程序,那么做出更改以使其成为真正的OO设计会更容易。

答案 3 :(得分:4)

另一本我高度强烈推荐的书 - 我个人认为比福勒的“通用”重构书更合适 - "Working Effectively with Legacy Code" by Michael Feathers。它真实地展示了你在做这类工作时会遇到的主要障碍。哦,并且:重构遗留代码对你的心灵来说可能相当困难。我希望你可以处理挫折...我喜欢这句话(不记得我从哪里得到它):“上帝能够在6天内创造世界,只因为没有遗留代码”。祝好运。 ;)

答案 4 :(得分:4)

导入Modelmaker是我遇到现有Delphi项目时的第一个动作。 Modelmaker将帮助您重构您的代码,因为:

  • 图形代表所有类,方法,变量等。
  • 在Delphi IDE中非常紧密集成(主菜单,弹出菜单, 单独的Modelmaker资源管理器, 工具栏,键盘快捷键)。这个 集成允许您快速 没有执行必要的操作 离开IDE
  • 它有一个专门的“重构”模块,可让您快速创建,移动 并重命名类和变量 不得不担心改变 底层代码。模型制造者会 自动更改名称和 所有单元中的参考。

Modelmaker的基本功能易于学习。模型制作者就像任何其他优秀的生产力工具一样 - 你投入的越多,你就越能摆脱它。 模型制造者不是免费的,但在提高生产力方面很容易为自己买单。 我还没有找到一个更好的工具来重构遗留的Delphi代码。他们提供免费试用和一些体面的教程电影。 给模特制作人一个尝试,祝你好运......

答案 5 :(得分:1)

在了解了重构代码所需的内容后,如果您需要OPF / ORM,我建议Jazz SDK