使用Delphi数据感知组件 - 优点和缺点

RBA*_*RBA 17 delphi oracle firebird data-aware ibm-midrange

我想知道您对在项目中使用数据感知组件的看法.通过使用Delphi和数据感知组件(来自Delphi的标准套件或第三方),开发应用程序(win32和web)的"优势"和"弱点"是什么?

使用FireBird我已经使用了IBObjects,它是一个成熟的组件套件并且运行良好.

但是还有很多其他RDBMS(MySQL,MSSQL,DB2,Oracle,SQLite,Nexus,Paradox,Interbase,FireBird等).如果您已经开发了大型项目,您已经使用了大量数据感知组件,请回答数据库类型和数据感知组件套件名称.

我也对DB2(AS400)感兴趣.您成功使用了哪些组件,或哪些组件真的很难用?

Joh*_*kup 20

我发现使用数据感知组件会导致应用程序在业务和UI逻辑之间没有明确的区别.

这适用于小型项目,但随着它们变大,代码变得越来越不可维护.

所有各种事件代码(及其交互)都可能成为真正的噩梦!

在这种情况下,我总是抛弃了数据感知组件,并转而采用(手工编码)MVC设计.

这确实需要大量的前期编码工作,但结果(IMHO)在可维护,可扩展和可调试的项目中.

  • 这是RAD方法的限制之一:很高兴有一些工作能够快速完成,但有时候比面向代码的解决方案更不强大和可维护. (10认同)
  • +1作为一名开发人员习惯于手工编码的MVC风格,目前正致力于数据感知控制,我完全同意.有大量重复的代码,有时是混乱的事件处理程序. (5认同)

Lac*_*anG 14

在尝试了数据感知和非数据感知风格的Delphi应用程序之后,我现在回到了数据感知组件阵营.正确分层代码需要一些工作和纪律,但它仍然比使用非数据感知控件手动完成所有操作更快.

我的一些数据感知组件使用技巧是

  • 不要只是在更大范围内重写FishFact.把一些想法放到你的设计中.

  • 不要使用TDataModule,使用许多 TDataModule,每个TDataModule只负责应用程序数据的一小部分.

  • TDatsts属于TDataModules,而TDataSource属于TForms(除非用于主/细节关系).

  • 使用内存中的数据集,例如DataSnap TClientDataSet.

  • 您的ClientDataSets不必完全镜像数据库表.DataSnap允许您在内存中按摩数据结构,以便生成为特定目的而定制的数据集.具体来说,你可以做的事情

    • 将两个或多个表连接到一个可编辑数据集中

    • 非规范化主细节表结构,有时可以简化您的UI代码.

    • 创建仅限内存的字段(如计算字段,但您也可以写入它们)

  • TClientDataSet嵌套表很有用,但不是表达主细节关系的唯一方法.有时最好通过TDataSource连接两个独立的TClientDataSets以旧方式完成.


Arn*_*hez 6

看看ORM解决方案.

这是一个很好的多层架构方法.请参阅ORM for DELPHI win32


Jer*_*ers 6

数据感知控件非常棒,但您必须确保将业务代码放在单独的层中.

这并不难,但你需要知道如何做到这一点.

一种方法是将DataSet组件放在DataModule(或其他非可视容器)中.

另一个方便的技巧是使用TClientDataSet来执行UI条目,并将其用作UI和业务层之间的中间缓冲区.然后,业务层使用特定于您的数据层的TDataSet组件.

--jeroen

  • 同意.如今,使用针对内存数据集(如TClientDataSet)的数据感知控件是我首选的用户界面模型.正确分层代码需要一些工作和纪律,但它仍然比使用非数据感知控件手动完成所有操作更快. (2认同)