English 中文(简体)
如何/是否可以只使用表单和数据模块重构Delphi程序
原标题:
  • 时间:2009-02-14 17:04:57
  •  标签:

多年来,我一直使用Delphi编写程序,这些程序不可测试,包括全局变量,唯一的类是表单本身,包含所需的表单UI本身的所有代码。

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

通常表格中的代码没有重用的需求,因此将逻辑转换为类是否有意义?

最佳回答

如果我遇到一个具有过多责任的表单(或其他类),我通常会按照以下模式:

  1. Define a new class for the logic.
  2. Create a member variable of the new class in the form.
  3. Create the class in the onCreate and free it in the onDestroy of the form.
  4. Move a single piece of logic (for example a variable) to the new class.
  5. Move or create all methods to the new class.
  6. Compile and test.
  7. Continue until all logic is put in the new class.
  8. Try to decouple the logic class from the form class. (You can even work with interfaces if you like).

有些情况下,单个类不足以解决问题,因此创建更多类也不是问题。而且这些类也可以包含其他类。

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

问题回答

首先,我强烈推荐阅读 Martin Fowler 的书籍《重构》

这将为您提供真正的理解,以最明智的方式接近引入改变现有(非OO)代码以提高可维护性。

在你清楚了解一个ORM所可能带来的益处后,我才不会考虑使用它。

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

  1. Define main classes for most general logic in the code.
  2. In each form, move the code that process the business logic inside the events as function / procedures in that form.
  3. Then Move these functions/procedures to those classes as static methods.
  4. Finally make only the needed code inside forms like validation UI, and calls to the classes.
  5. For the global variables try to omit as much as you can, and just pass the values as parameters to the methods.

我使用了静态方法,因为它能更方便地从事件中删除代码,只需要调用它们而不需要为每个操作创建/释放对象。最初的设计并没有将窗体与业务逻辑代码分离。

最终的应用程序并非完全面向对象,但是至少比以前更容易测试方法,而无需与表单和事件交互。

有时候你觉得从头重新设计应用程序比做出更改以实现真正的面向对象设计更容易。

我非常推荐另一本书——在我个人看来,它比Fowler的“通用”重构书更加合适——这本书叫做 《与遗留代码共处的有效方式》(Michael Feathers)。它真正展示了在这类工作中你将会遇到的主要问题。哦对了:重构遗留代码可能会对你的心理造成很大的压力。我希望你能承受挫折......我喜欢这句话(不记得从哪里得到的):“上帝能够在6天内创造出整个世界,仅仅是因为他没有任何遗留代码”。祝你好运。;)

当面对现有的Delphi项目时,将导入到Modelmaker是我的第一步。Modelmaker将帮助您进行代码的重构,因为:

  • It graphically represents all the classes, methods, variables, etc.
  • It is very tightly integrated in the Delphi IDE (main menu, popup menu, separate Modelmaker explorer, toolbar, keyboard shortcuts). This integration allows you to quickly perform the necessary actions without leaving the IDE
  • It has a dedicated "refactoring" module allowing you to quickly create, move and rename classes and variables without having to worry about changing the underlying code. Modelmaker will automagically change names and references in all units.

The basic functionality of Modelmaker is easy to learn. Modelmaker is like any other good productivity tool - The more you put into it, the more you get out of it. Modelmaker is not free but easily pays for itself in increased productivity. I have not found a better tool for refactoring legacy Delphi code. They offer a free trial and some decent tutorial movies. Give Modelmaker a try and good luck...

如果了解您需要重构代码的内容,如果您想要一个OPF / ORM,我建议Jazz SDK





相关问题
热门标签