在Delphi中从哪里开始OOP主要关注数据库开发?

use*_*285 7 database delphi oop frameworks

我想从GUI设计中隔离数据库代码.在一段合理的时间里,我一直在阅读/搜索/浏览mgm/mvp/mvc/persistence/objects等主题.我真的很难设计一个可重用的对象层次结构/框架.Delphi是RAD的一个很好的工具,但当你想以不同的方式解决问题时,文档似乎无效.我想为数据访问开发一些持久性之王,并轻松地将数据连接到对象/对象列表中.并以多种方式集成数据显示(使用现有组件或不使用dbaware,创建多种格式的导出/导入例程).我应该从哪里开始?你知道任何带代码的教程吗?例如,Delphi安装中包含的mastapp演示是RAD-way作为初创公司的一个很好的来源.我需要在OOP中使用等效的注释和教程

Des*_*her 12

嗯.很大的问题,这个东西不在手册中:(真的需要一本书来回答它.但是如果你要开始一个新的大项目,那么我的建议清单,用Delphi做了10年后,将如下开始:

通常

在开始版本1所需的功能之前,请先考虑一下.但是不要忽略版本2和3的花哨的可能性.

除简单的单独实用程序或基本数据输入屏幕外,不要使用数据感知控件.

推理:

  • 它们会立即破坏您的GUI < - >数据库分离.
  • 他们让你在用户友好性测试中略微降低了一点.
  • 他们鼓励Spaghetti Code

不要使用任何标准或第三方控件,包括表格,框架或数据模块.首先构建自己的派生类库 - 即使您在开始时没有添加任何功能,也总是使用这些类.

推理:

  • 完全控制应用程序的行为.
  • 简化前向兼容性.
  • 授予您完全自由地在新组件树中的任何位置引入新属性/功能,而无需编辑所有对话框和表单或对象.

尽可能将一切创建为具有getter属性的对象,只有当它们不能被只读时才能隐藏复杂性和setter .训练自己总是使用自己的属性 - 使用快速公共变量作弊通常会导致您稍后将其重新创建为属性.

数据库设计 - 读一本书:)

GUI < - >数据库分离.

由于应用程序将不得不与数据交互,因此100%的分离我认为不可能.相反,您的基线对象可能至少定义:

  • 检索或加载数据的机制
  • 编辑该数据的机制
  • 保存数据的机制
  • 一种显示数据的机制.

我会称之为松散耦合.

对于每个数据表或密切相关的表组,创建一个单独的Datamodule,其中包含只读查询,可写查询等.保持SQL尽可能简单 - 我在2天内将我的最后一个应用程序从Oracle移到MYSQL - 150个带有相关对象的表并编辑框架:).最初也将它们全部链接到一个池连接,也可以在它自己的Datamodule中.

听起来你已经意识到列表,特别是TObjectLists,是你的朋友.再次 - 为您需要的每种类型的对象派生自己的.我实际上隐藏了更简单对象中的真实列表.公开Items和Count属性是微不足道的.然后根据需要使用内部列表向基本项添加更多功能.从那里列表列表是一个简单的步骤,几乎自然地遵循它们所代表的数据库数据的结构.

通过实际存储应用程序的不同部分在数据库中使用/需要的列表类型,您可以使用此方法变得更加复杂.然后,您可以动态创建正确的列表,而无需应用程序实际知道其中的内容 - 开发阶段的列​​表和对象本身应包含他们操作/加载/保存和显示自己的数据所需的所有功能:).这也可以扩展到列表执行的功能.我使用了一些基本列表类型来公开简单的计数和项目 - 在我的例子中,它们有大约50个后代.

通过这种方式工作,您的项目可能会积累大量文件,但您可以依赖并信任Delphi - OO模型非常强大,很少被捕获.

如果您遵循大部分内容,您的主应用程序最终将成为列表加载器,这就是它:)在我的最新版本中,主要功能仅占用大约100行代码,但它启动的内容非常复杂.

最后 - 所有这一切都是很多工作:(第一次做对不会发生让我们说实话,所以要准备好妥协你漂亮的对象模型,让应用程序出门,但做出大的评论在哪里以及为什么你做了它以及如何在以后再次纠正它.

祝好运 :)

  • 您提到每个列表应包含操作.load.save数据的代码.那是错的.类模型应该不知道它如何连接到数据库.坚持不应该由不同的班级来处理.此外,不需要创建具有许多单独的SQLQuery控件的数据模块.您可以在需要时创建查询对象,动态创建SQL以执行某些任务.没有数据感知控件的OO编程大约有3层:GUI,模型和持久性. (2认同)

Bir*_*ger 5

如果您真的想编写自己的对象持久性框架,我强烈建议您阅读tiOPF网站上的文档.特别是概念手册.

在阅读本文档时,您可能也对使用tiOPF感兴趣.它是一个稳定且强大的持久性框架,可以与所有主要数据库一起使用.


Too*_*the 1

Delphi 有相当多的数据库控件,对于 RAD 来说非常有用,但是将数据库与 Gui 解耦比较困难。

您可以使用客户端数据集 (midas) 进行内部通信。它们可以与数据感知控件一起使用,并且具有许多其他有趣的属性。