我正在开发一个C++类库包含的领域模型类,我想补充的支持的实例,这些类从各种持久性机制,即数据库和文件。类的用户库应给予一个接口(?) 对其程序的一类,可以转移的数据从持久性的机制。

我知道数据的访问对象的图案看来工作Java,但我不是很确定如何将其应用于C++。是否还有其他的解决方案?

有帮助吗?

解决方案

C++支持多个继承所以你可以有一个通用的持久性API和继承持续性的机制。这将仍然需要使用自我反省,以得到出类的元数据,但你仍然会有这个问题任何持久层。

或者你可以做一些类似的,但是使用元数据来驱动代码生成器,填补在吸气"和"制定者为持久性层。

任何持久层通常将使用一个或另一个办法,使你的问题是挂钩的装载机构进入的持久性层。我认为这使问题稍有不同,从一个单一的持久层,但应对它从另一个方向。而不是建筑领域类到一个持久框架,提供一套域的类的挂钩的一个持久框架,即第三方可以插入他们的数据存取机制。

我认为一旦你提供接入类的元数据和回调的perisistence机构是相对直接的。看的元数据组成的任何便利C++O/R映射框架,并了解它们如何工作。封装这API的基类的域课程,并提供一个通用的吸气/器API for化或坚持。其余的人实施的持久性层。

编辑: 我想不C++图书馆的类型的可插入的持久性机构你描述,但我没有东西在蟒蛇可能已经有这种类型的设施增加。特别执行使用的设施,在Python没有直接C++相当,虽然基本原则可能适于用C++.

在蟒蛇,你可以拦截访问的实例变量的压倒一切的 __getattr()____setattr()__.持久性机构实际上保持其自己的数据的高速缓存在幕后。在功能性混合成类(通过多个继承权),它推翻默认系统的行为,对成员访问和检查是否属性的查询相匹配的任何东西在它的字典。在哪里发生这种情况,有人呼吁重新定向,以获得或设定中的一项数据高速缓冲存储器。

高速缓存有的元数据。这是意识到的实体之间的关系在其数据模型,和知道其属性的名称来拦截访问的数据。这个工作分离,从所访问的数据库层和可能(至少在理论上)已经允许的持久性机制将使用不同的驱动程序。没有固有的原因,你就不能(例如)建立一个驱动器,序列化出来XML文件。

做这样的事情的工作C++将是一个比较繁琐,并可能不可能使对象的存取为透明,因为它是与这种系统。你可能会最好有一个明确的协议,该协议载荷和冲的对象的国家的高速缓存。代码,这将是相当适合生成从高速缓存元数据,但这必须在编制时间。你可以做一些与模板或通过压倒一切的 -> 操作人员的访问协议更加透明,但这可能是更多的麻烦比它的价值。

其他提示

提升序列化提供了一些漂亮的功能有用的东西,用于序列化C ++类型,但它与你想要的接口我不知道的匹配程度。它支持侵入式和非侵入式设计,因此非常灵活。

我会避免序列化,恕我直言,我们在1995年为MFC中的一个应用程序实现了这个,我们足够智能使用独立对象版本控制和文件版本控制,但你最终得到了很多旧的乱码一段时间后。

想象一下某些场景,弃用类,弃用成员等,每个场景都会出现一个新问题。现在我们使用compreseds“XML type”我们可以添加新数据并保持向后兼容性。

从将数据映射到对象中抽象读取和写入文件,我们现在可以切换文件格式,添加导入器/导出器而无需修改我们的核心业务对象。

有人说一些开发人员喜欢序列化,我自己的遭遇是切换代码库,平台,语言,工具包都会带来很多问题,读取和写入数据不应该是其中之一。

此外,使用标准数据格式和一些专有密钥,意味着与第三方合作更容易。

您可能希望查看提升序列化。没有使用它我不能说是否推荐它。 Boost库通常具有高质量。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top