gpt4 book ai didi

c++ - 如何使用数据访问对象进行序列化和关系数据库数据访问

转载 作者:太空宇宙 更新时间:2023-11-04 12:28:58 24 4
gpt4 key购买 nike

我正在开发一个 C++ 域模型类库,它应该提供一些设施或框架(即接口(interface)类等),用于将类实例数据写入/读取二进制文件和 RDBMS。这个库的基础是一个使用 RDBMS 的应用程序,有几种方法可以通过执行一系列数据库检索和更新调用来实例化一个类,以获取成员数据的集合。序列化数据访问有不同的数据组织方式,所以我希望域模型完全不知道主键/外键、ID 等。

为了解决这个问题,我考虑使用 Data Access Object (DAO) 模式,并希望就 DAO 对象的“粒度”、生命周期和使用提出一些建议(在您的回复中,请注意我将使用 C++,而不是 Java,并且域类不能包含任何来自 RDBMS 或二进制文件存储的 ID/ key 信息):

  1. 域对象的每个 Foo 实例是否都有自己的 FooDAO 实例,或者类 Foo 的所有实例是否都有一个 FooDAO 实例?
  2. 是为每个 Foo 实例创建一次 FooDAO,还是仅在需要访问数据时创建 FooDAO 实例,然后立即销毁?
  3. J2EE除了 DAO 之外,DAO 上的页面还介绍了 DTO。为什么 DAO 不能传输数据?
  4. 对于具有其他域类 Bar 实例的复杂域类 Foo,FooDAO 类使用 BarDAO 类来检索数据似乎是不可避免的。这将导致域类结构和 DAO 类结构中的并行层次结构/依赖关系。如何最好地管理它?

感谢您的帮助!

最佳答案

我没有很好的解决方案给你,但我可以告诉你我有什么,以及一些想法和经验。我已经构建了一些非常相似的东西,基于我之前看到的模型,作为 C++ 库。

一些想法,排名不分先后:

  • 数据库中的每个实例都有一个单独的 DAO 对象实例。如果您有一个共享实例,线程同步可能会出现问题,您将被迫进行大量复制。
  • 出于几个原因,我的图书馆 DAO 类使用与 RDBMS 类型密切相关的类型。首先,该库支持在底层数据存储中自动创建和更新存储,因此类需要有足够的信息来创建表。其次,它使数据转换变得更加容易和可优化(例如,您可以使用 native 接口(interface)直接进行 ODBC/OLEDB 数据复制)。缺点是您不能在 DAO 对象中拥有“好的”类类型(例如:具有比实际字符串缓冲区更多数据的字符串抽象)。
  • 当然,我是按需创建的,因为存储中的数据可能比实际放入内存中的数据多得多。
  • 我尽量使 DAO 类保持简单,具有最少的访问器功能,并“接近”底层数据结构。这意味着不从其他 DAO 类继承,实例具有关键变量成员等。

在 DAO 类之上,我构建了更易于访问的类,这些类代表我的应用程序中的数据,并且可能会也可能不会 1-1 映射到 DAO 类。这些允许具有任何类型的成员和结构,应该是应用程序使用的,并且具有将数据复制到/从作为它们基础的 DAO 类的方法。

希望对您有所帮助。

关于c++ - 如何使用数据访问对象进行序列化和关系数据库数据访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/197509/

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