10

我知道将用户界面代码与域代码分开很重要——应用程序更易于理解、维护、更改和(有时)隔离错误。但这是我的心理障碍...

Delphi 附带的组件具有执行我想要的方法的方法,例如,RichText 备忘组件让我可以处理富文本。其他组件,例如 TMS 的字符串网格,不仅可以满足我的需求,而且我还为该功能支付了额外费用。这些特性将 R 置于 RAD 中。

编写自己的类来完成别人已经为我完成的事情似乎不合逻辑。它正在重新发明轮子[曾经尝试过直接使用富文本吗?:-) ] 但是,如果我使用内置在这些组件中的功能,那么我最终会得到大量混合的 UI 和域代码——我将有一个表单,其中大部分代码都内置到它的事件处理程序中。

你如何处理这个问题?...或者,如果我想继续使用其他人已经为我编写的代码,你会建议我如何处理这个问题?

4

2 回答 2

6

首先,请记住“处理富文本”不是您的应用程序应该做的事情。您的应用程序应该使用户能够执行特定任务,而处理该任务的代码是您的域逻辑。如果您的程序需要完成的部分任务涉及处理富文本,那么您可以将这部分任务委托给富文本组件。正如您所提到的,复杂性来自这些库和域逻辑之间的接口。

Delphi 域逻辑和 Delphi UI 控件相互交互的方式主要是通过事件处理程序。但这并不意味着您需要将域逻辑放在事件处理程序本身中。相反,尝试编写包含您需要完成的特定领域任务的代码的单元,并让事件处理程序调用这些单元。

换句话说,不要编写类来重新发明轮子并做其他人已经为你做过的事情。你是对的,那是不合逻辑的。但是,将您使用的控件和库没有提供的特定于应用程序的部分编写为它们自己独立的单元中的独立类,并通过事件处理程序和表单上的公共方法或属性将它们连接起来,您最终会得到具有良好的关注点分离。

于 2010-04-20T20:50:40.947 回答
1

您可以通过使用带有 clientDataSets 的数据模块来包含您的业务逻辑和数据对象来创建一个相当干净的分离。您甚至可以更进一步,将业务逻辑从数据中分离出来。显然,表单包含 UI。几乎您使用的每个组件都可以进行数据绑定,这使得将它们绑定到您的 clientDataSet 变得很容易。

请记住,Delphi 的做事方式并不总是符合 Java 或 .Net 的最佳实践。你的目标应该是做一些对 Delphi 有用的事情。

于 2010-04-20T22:58:50.893 回答