用于存储桌面、面向对象应用程序数据的技术是什么?

发布于 2024-12-09 10:21:19 字数 233 浏览 3 评论 0原文

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

SQLite 似乎是一个常见的选择,但它对继承的支持有点差,并且实现它需要诉诸不同的技巧,所以我想知道是否有更好、更灵活的选择?

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

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

Say I'm coding a standalone desktop application. Say it's object-oriented and it needs to save its data into a file. The data is normally stored in different classes. Inheritance is involved.

SQLite seems to be a common choice but its support for inheritance is somewhat poor and implementing it requires resorting to different tricks so I wander if there are better, more flexible options?

(assume that creating my own data format is not an option)

EDIT: More specifically, I'm currently working with Windows and C#, though for the future I would also be interested in C++ solutions.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

三寸金莲 2024-12-16 10:21:19

可能没有理由使用关系数据库来存储数据。 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# 提供了一种工具,可以让您将旧对象迁移到新对象。如果您选择序列化路线,请检查一下。

There might not be a reason to use a relational database to store the data. OO-RDB relational mapping tools are abundant, but add a more complexity and failure points to an application. C#/.Net provides nice a Serialization interface (http://goo.gl/zmyeo). Using .Net's serialization, objects can be written to a file in either XML or binary format. The XML or binary file can then be "de-serialized" back into objects. It's generally fast and convenient, and usually sufficient for a prototype.

Some advantages of relational databases are they support SQL (making it easy for other applications to use the data) and they support many users accessing the same data set. Once the application is working or it outgrows the functionality offered by Serialization, look into moving it to a relational database like SQLite.

The C++ issue is a little harder. C++ does not offer any out-of-the box serialization. Its lack of reflection makes it tough to write and maintain object persistence code. My own strategy is to avoid C++ for OO application, if possible. If C++ is a must, take a look at some of the OO-RBD mapping tools for C++: http://goo.gl/7ytOV.

PS: As the application evolves class and attribute names are changed, added, and deleted. Reading back in serialized objecs from an older code base presents problems-- the contents of the file do not match the structure of the (updated) classes. C# provides a facility that lets you migrate old objects to new objects. If you go the Serialization route, check into that.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文