delphi - 当 UI 组件具有内置功能时,如何将应用程序逻辑与 UI 分开?

标签 delphi oop separation-of-concerns

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

Delphi 附带的组件具有可以执行我想要的操作的方法,例如,RichText Memo 组件可以让我处理富文本。其他组件,例如 TMS 的字符串网格,不仅可以实现我想要的功能,而且我还为该功能支付了额外费用。这些功能将 R 纳入 RAD。

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

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

最佳答案

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

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

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

关于delphi - 当 UI 组件具有内置功能时,如何将应用程序逻辑与 UI 分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2678457/

相关文章:

delphi - 什么是内部错误E5912

python - 如何返回Python中类的定义?

database - BDE 安装 : there is not enough space on drive c. 安装到这个位置

delphi - 确定要使用的字符集

delphi - 更改 TStringGrid 单元格的字体颜色

JavaScript 和原型(prototype)设计过程

c++ - 重载方法未在强制转换运算符重载中调用

c# - 从 Entity Framework 数据库生成接口(interface)首先自动生成代码

javascript - 如何在 View 中对 Controller 中的更改使用react

haskell - 为字典实现 Applicative 实例(Map、关联数组)