gpt4 book ai didi

delphi - 在Delphi中使用DB Aware Controls而不是非DB Aware Controls有什么优点

转载 作者:行者123 更新时间:2023-12-03 14:38:12 25 4
gpt4 key购买 nike

我会说服我的 friend ,在开发数据库应用程序时,在 Delphi 中使用数据库组件(DB Aware Controls)是迄今为止最好的选择。

这个争论从他很多年前就开始了:直到今天,他仍然相信使用 TEdit、TStringGrid 等简单控件以及一组 getter 和 setter 方法来填充它们,无论是在灵 active 还是在灵 active 方面都是最好的解决方案。整个项目的可维护性。

对我来说,这至少听起来违反直觉。

我认为在开发数据库应用程序时使用 DB Aware Controls,如 TDBEdit、TDBGrid 等是正确的做法。

所以:请帮助我提供关于使用 DB Aware Controls 的合理建议来说服他!

预先感谢你们所有人,他们至少会发表自己的建议,无论支持一种或另一种解决方案。

--法比奥·维塔莱

最佳答案

数据库感知与非数据库感知是一种过时的讨论。 DB-Aware 控件具有自动数据绑定(bind)功能,这意味着它们会自动填充数据、进行更改检测并写入有界数据源的成员;在非 dbaware 控件中,由您来完成这些任务。这也可能导致困惑的代码 - 或过度设计的框架只是为了进行数据绑定(bind)。这两种情况都很糟糕。

数据源的类型和单个控件的质量将决定性能。我见过很多数据绑定(bind) TStringGrid 的代码,只是为了避免使用 TDBGrid,因为纯粹主义(当 TDbGrid 会做得很好时) - 只是过于荒谬浪费时间。

当 TClientDataset 成为断开连接的应用程序事实上的数据集时,它就成为一个过时的讨论:您可以提取数据、断开连接、处理数据、再次连接并应用更改。由于 CDS+DbAware 控件将完成 99% 的界面,因此您可以使用非数据感知控件来完成接下来的 1%(对于某些复杂的界面)。

我仍然没有 XE2 来查看 LiveBindings 是否能很好地完成 OO 数据绑定(bind)工作 - 如果是这样,现在所有控件都可以根据需要进行数据库感知。

编辑:在da-soft的回答中,他(她?)认为DbAware控件实现了MVC模式,而LachlanG不同意这一点,即使它确实如此,代码本身不就是MVC吗?我将在此捐出 0.02 美元 ;-)

我认为在 DataModule 和 Entity(如 ERD 中)或 DataModule 和 Form 中使用 1:1 关系,您可以获得一个职责分离的应用程序:

  • form dfm -> 布局和设计时数据绑定(bind)(只有数据源)
  • form *.pas -> 控制接口(interface)并向数据模块请求数据(充当 Controller )
  • 数据模块 -> 应答表单数据检索请求的方法和数据更新

我通常有一个单独的数据模块用于数据库连接,它通过表单/实体的属性传递。

关于delphi - 在Delphi中使用DB Aware Controls而不是非DB Aware Controls有什么优点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8923679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com