有关在Delphi中分离数据访问,业务逻辑和GUI的任何建议

时间:2009-05-08 14:10:26

标签: delphi user-interface orm business-objects business-logic-layer

我想将数据层与业务逻辑和业务逻辑从GUI分离。潜入网络我偶然发现了一些资源,但仍无法让我清醒。有些人谈论的模式,其他人指出各种框架。  我的要求是:

  • 操纵来自rdbms的数据(主要是mysql)CRUD操作
  • 处理id生成(我应该使用自动增量或提供的数据引擎还是生成的pascal代码)
  • 表关系可能是逻辑的(不使用引用完整性)或不是
  • 需要能够从数据模型生成对象关系
  • 数据必须转换为业务对象和业务逻辑操作
  • 应使用现有的gui组件或免费软件

我需要的是:

  • 一些基本示例代码/应用程序布局的指导技巧/建议(例如units-classes-modules-directories)...当我不是OOP专家时,我必须设计类层次结构时感到困惑
  • 一个带教程的简单框架
  • 甚至是您自己的日常代码/框架/方法

7 个答案:

答案 0 :(得分:11)

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

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

让UI与这两个人交谈以实现目标。您可以直接在表单上使用数据库访问组件,但最好将其作为“仅显示”模式并使用数据模块对数据执行操作。 (您可以在表单上为基本应用程序执行所有操作,但如果您想要将应用程序模块化,那么将其分开是明智的。)

答案 1 :(得分:4)

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

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

随着业务逻辑和数据的到位(甚至部分),UI更直接。并且可维护。

答案 2 :(得分:3)

查看tiOPF

答案 3 :(得分:3)

我个人使用tiopf作为商业模式。 Tiopf提供数据访问层。来自存储库的最新代码包括类似于MVC的模型-gui-mediator框架,用于显示模型。这允许您使用标准delphi组件显示数据。

Tiopf还包含许多ID生成器(guid,32位和64位整数等)。

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

答案 4 :(得分:2)

尝试开源InstantObjects,您将始终希望将其用于Delphi中的各种数据库编程。

在IO中,您必须在其界面中定义整个数据结构,然后它将为您生成必要的代码。

试试吧。

至于id Generation信任MySQL为你生成一个自动增量id。不要花时间编码。

答案 5 :(得分:2)

我使用并且运行良好的方法是尝试从您的应用程序中承担不同的角色,然后进行编程,就像您在该角色中一样。例如,当你在数据库后端工作时,甚至不要考虑gui。而是考虑公开只使用数据的类和方法。如果您制作自己的SDK,稍后将使用它,您会发现维护它将更加容易。

基于测试的开发是你的朋友。了解DUnit,并创建小型简洁测试来练习任何非平凡的代码。通过查看充满代码的屏幕来记录界面以及任何不明显的内容。

答案 6 :(得分:1)

我将看一下Model-View-Controller(它是Observer / Observable Pattern的扩展)。这意味着“视图”(即UI)仅知道如何更新数据,然后响应正在更新的数据。 Model(或Observable)知道如何操作数据并告诉Views它已被更新。这意味着您可以替换UI而无需更改数据提供程序,反之亦然。

在Google上进行搜索,因为Delphi有很多这方面的例子(但对Java / C#等没那么多)