说我正在编写一个独立的桌面应用程序。说它是面向对象的,需要将其数据保存到文件中。数据通常存储在不同的类中。涉及继承。
SQLite似乎是一个常见的选择,但它对继承的支持有点差,实现它需要采用不同的技巧,所以如果有更好,更灵活的选项我会徘徊?
(假设不能创建我自己的数据格式)
编辑:更具体地说,我目前正在使用Windows和C#,但是对于未来我也会对C ++解决方案感兴趣。答案 0 :(得分:1)
可能没有理由使用关系数据库来存储数据。 OO-RDB关系映射工具非常丰富,但为应用程序增加了更多的复杂性和故障点。 C#/ .Net提供了很好的序列化接口(http://goo.gl/zmyeo)。使用.Net的序列化,可以将对象以XML或二进制格式写入文件。然后可以将XML或二进制文件“反序列化”回到对象中。它通常快速方便,通常足以用于原型。
关系数据库的一些优点是它们支持SQL(使其他应用程序可以轻松使用数据),并且它们支持许多用户访问相同的数据集。一旦应用程序正在运行或它超过了Serialization提供的功能,请考虑将其移动到像SQLite这样的关系数据库。
C ++问题有点困难。 C ++不提供任何开箱即用的序列化。缺乏反射使得编写和维护对象持久性代码变得困难。我自己的策略是尽可能避免使用C ++ for OO应用程序。如果必须使用C ++,请查看一些用于C ++的OO-RBD映射工具:http://goo.gl/7ytOV。
PS:随着应用程序的发展,类和属性名称被更改,添加和删除。从较旧的代码库中读回序列化的对象会出现问题 - 文件的内容与(更新的)类的结构不匹配。 C#提供了一种工具,可以将旧对象迁移到新对象。如果你去序列化路线,请检查。