2

假设我正在编写一个独立的桌面应用程序。假设它是面向对象的,它需要将其数据保存到文件中。数据通常存储在不同的类中。涉及到继承。

SQLite 似乎是一个常见的选择,但它对继承的支持有点差,实现它需要诉诸不同的技巧,所以如果有更好、更灵活的选择,我会徘徊吗?

(假设创建我自己的数据格式不是一个选项)

编辑:更具体地说,我目前正在使用 Windows 和 C#,尽管对于未来我也会对 C++ 解决方案感兴趣。

4

1 回答 1

1

可能没有理由使用关系数据库来存储数据。OO-RDB 关系映射工具很丰富,但给应用程序增加了更多的复杂性和故障点。C#/.Net 提供了很好的序列化接口 ( http://goo.gl/zmyeo )。使用 .Net 的序列化,可以将对象以 XML 或二进制格式写入文件。然后可以将 XML 或二进制文件“反序列化”回对象。它通常快速方便​​,并且通常足以用于原型。

关系数据库的一些优点是它们支持 SQL(使其他应用程序更容易使用数据)并且它们支持许多用户访问相同的数据集。一旦应用程序正常工作或超出了序列化提供的功能,请考虑将其移至 SQLite 等关系数据库。

C++ 的问题有点难。C++ 不提供任何开箱即用的序列化。它缺乏反射使得编写和维护对象持久性代码变得很困难。如果可能,我自己的策略是避免将 C++ 用于 OO 应用程序。如果必须使用 C++,请查看一些用于 C++ 的 OO-RBD 映射工具:http: //goo.gl/7ytOV

PS:随着应用程序的发展,类和属性名称会更改、添加和删除。从旧代码库中读回序列化对象会出现问题——文件的内容与(更新的)类的结构不匹配。C# 提供了一种工具,可让您将旧对象迁移到新对象。如果你走序列化路线,请检查一下。

于 2011-12-30T18:47:25.910 回答