gpt4 book ai didi

database - 如何使用 dbExpress 和 Delphi(也可能是 DataSnap)来抽象我的业务模型?

转载 作者:搜寻专家 更新时间:2023-10-30 20:00:12 25 4
gpt4 key购买 nike

如果我的问题不清楚,请通过评论帮助我改进。

我是 Delphi 和 dbExpress 的新手,我刚刚熟悉 TSQLDataset、TDataSetProvider、TClientDataSet 和 TDataSource 类。

我正在从事的项目以一种对我来说很奇怪的方式使用这些组件。有一个巨大的数据模块单元,其中包含许多前面描述的四重奏类。我猜想有更好的(和更模块化的)方法来做到这一点。 DataSnap仅用于将此数据模块放置在服务器应用程序中,以便客户端通过它访问数据。

所以,让我试着解释一下我的一些疑惑:

  1. 每个类的作用是什么?我阅读了文档,但无法对这个主题(特别是关于 TDataSetProvider)有实际的了解。
  2. 哪些类应该在数据模块中,哪些应该在我的表单中?
  3. 是否可以创建一个中间层来从我的数据库设置中抽象出我的业务模型(也许创建返回不可变数据集的函数?)?
  4. 如果是这样,使用 DataSnap 这样做是否明智?

对不起,如果我不够清楚。提前致谢。

最佳答案

组件

TDataSource 是数据感知控件和它们从中获取值的数据集(TDataSet 后代)之间的桥梁。

TClientDataSet 就是这样一个数据集。 TClientDataSet 可以单独使用,例如访问 xml 文件中包含的数据,但也可以连接到 TDataSetProvider。

TDataSetProvider 是内存中的 TClientDataSet 和通过某种驱动程序从数据库中获取数据的实际数据集之间的桥梁。在客户端服务器开发中,您通常会看到一个 TRemoteDataSetProvider(名称可能不同,我不经常使用这些组件),它弥合了客户端和服务器之间的差距。

TSQLDataSet 是从某个数据库获取数据的实际数据集。

如果我在一个可执行文件中看到这四个部分,我会觉得很奇怪。我希望服务器端的 TSQLDataSet 连接到 TRemoteDataSetProvider 的对应部分。但是,我想对于嵌入式数据库,它可能是支持公文包模型的一种方式,这正是 TClientDataSet 真正有用的地方(TClientDataset 非常强大,这只是它的强项之一。)


单个数据模块

哎呀。一个巨大的数据模块是惰性编程或对如何使用数据模块的误解的结果。拥有一个“托管”数据库连接的数据模块是完全正常的,然后由更紧密地关注应用程序各个方面的各种其他数据模块使用。


领域抽象

关于抽象您的业务模型,dbexpress 和 datasnap 真的不应该出现在您的业务模型中。它们应该是您的数据层的一部分。

TDataSource、TClientDataSet 和自定义 TDataSetProvider 后代可用于利用 UI 中数据感知控件的强大功能,同时仍将 UI 与业务模型分开。在这种情况下,自定义 TDataSetProvider 将成为客户端数据集与域层中的集合和实例之间的桥梁。

即便如此,我仍然希望看到一个单独的数据层,使用 TRemoteDataSetProviders 或直接的 TDataSet 后代(如 TSQLDataSet)为域层提供数据。

您提到的单个大数据模块可能是该数据层的一部分,客户端数据集为业务层提供数据。正如您还提到 TDataSource 作为常见四重奏的一部分一样,该应用程序可能是以 RAD 数据感知方式开发的,其中 UI 控件基本上直接连接到数据库列/表。

如果您想将此应用程序转换为具有更多层次的架构,请谨慎而缓慢地进行。首先了解当前的体系结构,并充分了解它,以了解这种转换将产生的影响。 Serg 提供的链接肯定会帮助您。 Pawel Glowacki 撰写了大量有关 DataSnap 的文章。

关于database - 如何使用 dbExpress 和 Delphi(也可能是 DataSnap)来抽象我的业务模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7627876/

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