Delphi中如何分离数据访问、业务逻辑和GUI?有什么建议吗?

6
我希望将数据层与业务逻辑分离,并将业务逻辑与GUI分离。在网上搜索时,我发现一些资源,但仍然无法梳理清楚。有些人谈论模式,而其他人则指出各种框架。
我的要求是:
  • 从RDBMS(主要是MySQL)操作数据进行增删改查。
  • 处理ID生成(应该使用自动增量还是数据引擎提供或Pascal代码生成)。
  • 表关系可能是逻辑的(不使用参照完整性)或非逻辑的。
  • 需要能够从数据模型中生成对象关系。
  • 必须将数据转换为业务对象并操作业务逻辑。
  • 需要使用现有的GUI组件或免费组件。
我需要的是:
  • 一些指导技术/建议,包括基本示例代码/应用布局(如单位-类-模块-目录)...由于我不是面向对象编程专家,当我需要设计类层次结构时会感到困惑。
  • 一个简单的框架及其教程。
  • 甚至可以是您自己的日常代码/框架/方法。
7个回答

11

由于您正在使用Delphi,请确保查看DataModules。这是您放置数据库访问组件和逻辑的地方。

将类放在普通的“Unit”文件中。

通过让UI与这两个模块交互,实现所需功能。您可以直接在表单上使用数据库访问组件,但最好只在“仅显示”模式下执行操作,并使用DataModule对数据进行操作。(对于基本应用程序,您可以在表单上完成所有操作,但如果您想将应用程序模块化,则将其分开是明智的)。


4

帮助保持这种分离的一种简单方法是为您的业务逻辑编写单元测试。除了其他(重要的)好处外,使代码可测试意味着它不能(有意或无意地)与UI紧密耦合。

我尝试(但并不总是成功)通过使用ClientDataSets将数据层的详细信息与后端使用的内容(通常是DBExpress或DBISAM)分开。我还尝试编写至少一些集成测试以确保数据层按预期工作(使用已知值的单独测试数据库)。

有了业务逻辑和数据(即使只是部分),UI就变得更加直观。而且易于维护。


3

3

个人而言,我使用 tiopf 作为业务模型。tiopf 提供数据访问层。最新的代码库包括了一个类似于MVC的模型-gui-mediator框架用于显示模型。这使您可以使用标准的Delphi组件来显示数据。

tiopf 还包括多个ID生成器(GUID、32位和64位整数等)。

如果您对 tiopf 感兴趣,建议您先查看我的概述,然后将任何问题直接提到新闻组。


2
尝试使用开源的InstantObjects,你将会想要在Delphi中进行所有类型的数据库编程时都使用它。
在IO中,你需要在其接口中定义整个数据结构,然后它将为你生成必要的代码。
只需尝试一下。
至于ID生成,请相信MySQL可以为你生成自动递增的ID,不要浪费时间编写它。

2

我使用的一种方法非常有效,那就是尝试扮演应用程序中的不同角色,然后像你在那个角色里一样编程。例如,当你在处理数据库后端时,不要考虑GUI。相反,考虑暴露仅与数据一起工作的类和方法。如果你制作自己的SDK以供以后使用,你会发现维护它会更加容易。

基于测试的开发是你的朋友。了解DUnit,并创建小而简洁的测试来运行任何非平凡的代码。记录接口以及在屏幕上查看代码时不明显的任何内容。


1
我建议您了解一下Model-View-Controller(MVC)模式,它是观察者/可观察模式的扩展。这意味着“视图”(即用户界面)只知道如何更新数据,然后响应数据更新。模型(或可观察对象)知道如何操作数据并告诉视图已经更新。这意味着您可以替换用户界面而无需更改数据提供程序,反之亦然。
在Google上搜索一下,因为有很多Delphi的例子(但Java / C#等的例子就不那么多了)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接