使用Delphi进行数据库开发的最佳实践是什么?

时间:2009-06-05 12:22:19

标签: database delphi oop

  1. 如何高效地使用RAD方式(重用代码)。任何 样本,现有图书馆,基础 crud发电机?
  2. 我如何设计OOP方式?哪一个     设计模式用于     连接,抽象不同     引擎/数据库访问层     (bde-dbexpress-ado),基本的CRUD     操作。

6 个答案:

答案 0 :(得分:4)

如果使用“将每个数据库对象放入一个大数据模块”(或大型应用程序中的“少数大数据模块”)方法,请务必小心。这可以使您的项目数据模块如此之大,您将不得不使用高清显示器查看此数据模块上的所有TXDataset
底线:切换到使用业务逻辑的专用类而不是大型全局数据模块。仅在非常小的项目中使用具有逻辑的全局数据模块。

答案 1 :(得分:4)

嗯,我强烈建议您在设计用户界面时使用Actions(TActionList)。有许多预定义的操作,包括可以对数据集执行的下一个/上一个/插入/删除/编辑/更新操作,因此最好使用这些操作并将它们链接到表单上的按钮/菜单。这可以防止重复的UI逻辑代码。

Delphi不需要CRUD生成器!!将TDataSource,TDBGrid和TActionList添加到表单,将预定义的数据源操作添加到操作列表,将这些操作链接到按钮或菜单,然后就完成了!

答案 2 :(得分:4)

我有自己的Delphi / MySQL框架,可以让我快速添加“新屏幕”。我不会分享它,但我可以描述我采取的方法:

我使用带有基于TFrame的层次结构的选项卡式界面。我创建了一个标签并将TFrame链接到其中。

我使用标准的mysql存储过程实现来处理所有的crud管道和并发控制。 CustomerSEL,CustomerGET,CustomerUPD,CustomerDEL等......

我的主要表单主要包含导航栏面板和包含TPageControl的面板

我的层次结构中的类的示例

TFRAME TMFrame - 我的派生,接口实现捕获OnShow,OnHide和其他一些细节

- TWebBrowserFrame --TDataAwareFrame   --TObjectEditFrame     --TCustomerEditFrame     --TOrderEditFrame 等等...   --TObjectListFrame     --TCustomerListFrame

等...

和一些对话.. ..

TDialog TMDialog   --TDataAwareDialog     --TObjectEditDialog        - TContactEditDialog       等等..     --TObjectSelectDialog       --TContactSelectDialog

等...

当我添加要管理的新对象时,它可能是客户的新属性,假设我们想跟踪客户拥有的车辆。

创建表CustomerVehicles 我运行我的特殊sproc生成器,创建我的SEL,GET,UPD,DEL 测试那些......

从我上面提到的基类派生,删除一些控件。将选项卡添加到TCustomerEdit。

Delphi始终将数据集作为抽象层,通过DataSources将其公开给您的GUI。将数据集添加到客户数据模块,然后“注册”。我自己的派生数据模块类TMDataModule

中的自定义函数

安全控制同样在框架中处理。我'注册'需要安全标志才能显示或启用的组件。

我通常可以添加一个新对象,构建sprocs,在一小时内添加维护屏幕。

当然,这通常只是一个开始,通常当你添加一些东西时,你使用它不仅仅是跟踪。如果这是一个车库应用程序,我们想要添加客户带入车库的车辆,识别它,以便我们可以跟踪历史记录。但即便如此,它也很快。

我尝试使用'更新的开发工具'转包给年轻人,当我说我用Delphi快十倍时,他们似乎永远不会相信我!我可以在两个小时内完成没有错误的工作,看起来它们需要两天时间,而且它们仍然有漏洞......

DO - 小心规划您的VFI!正如有人提到的,如果你想在你的父类之一上更改组件的名称,请做好准备。你需要打开并“编辑”层次结构中的每个孩子,即使你清理DCU,你仍然可以拥有一些DFM地狱。我可以向你保证,2006年这仍然是一个问题。

不要创建一个怪物数据模块

你需要花时间进行前期设计,在你创造了大量的家属之后进行重构可能是一个有趣的挑战,但是当你必须快速获得新的工作时,这是一场噩梦!

答案 3 :(得分:3)

对于大型应用程序,我使用tiopf对象持久性框架。这让我可以轻松处理对象而不是数据集和交换数据库。我的大多数业务逻辑都转移到了业务对象模型(BOM)中,我的表单非常愚蠢。 tiopf有几种方法可以将BOM连接到表单;持久感知控件,Ttidataset用于数据感知控件和Mogel Gui Mediator类用于连接正常控件。

对于小型和快速的应用程序,我只使用数据模块和数据库组件。要记住的主要事项是:

  • 尽可能多地在数据模块中添加代码(在表单中尽可能少)。
  • 按功能划分多个数据模块,例如电子邮件模块,收入模块,发票模块......
  • 测试,测试,测试

答案 4 :(得分:2)

使用VFI(视觉形式继承)。设计一个标准的数据库表单。例如,空DataSet,DataSource,一个由2张纸组成的PageControl。首先是空的,稍后您将添加编辑控件来操纵子表单中的数据。将DBGrid添加到第二个工作表。请注意,这不是OOP方式,但它简单快捷。

答案 5 :(得分:2)

我会看看Remobjects的Data Abstract