Delphi对象持久化,最好的方法是啥
Posted
技术标签:
【中文标题】Delphi对象持久化,最好的方法是啥【英文标题】:Delphi object persistence, what is the best wayDelphi对象持久化,最好的方法是什么 【发布时间】:2010-09-28 15:13:33 【问题描述】:我已经开发了用于绘制一些形状(主要是线条)的应用程序,现在我需要能够将草图存储到文件中,我知道 delphi 已经内置了用于对象持久性的例程,但我从未使用过它。
如果我必须持久化还引用其他对象(将被存储到)的对象,有人可以告诉我可以使用对象持久性吗?我有可以连接到其他 TLine 对象等的 TLine 对象。
使用此功能或编写自定义过程来存储/读取文件到/从文件中更好吗?
【问题讨论】:
【参考方案1】:内置对象持久性主要设计用于将组件流式传输到 dfm,您需要做的持久化草图的工作不会从该机制中受益匪浅。
我认为你最好提出一个自定义方案。
【讨论】:
【参考方案2】:我过去使用的一种方法是将我的对象属性存储在一个 XML 文件中,编写一个自定义“保存”例程,该例程添加到传递的 IXMLNode,以及一个从传递的 IXMLNode 读取的新构造函数。我将组件存储为节点,将属性存储为属性(除非属性是另一个对象,否则它将是子节点)。
我相信 Delphi Jedi 项目中有一些例程可以为您处理组件流,但我没有直接使用它们,因为我的大部分 XML 流是手工完成的,因为我的对象非常简单并且可以渲染只有少数几个属性。
【讨论】:
【参考方案3】:我使用 TI 对象持久性框架 (tiopf.com)。我在http://tiopf.sourceforge.net/Doc/overview/index.shtml 写了概述。
它将让您将对象和列表保存到 xml、csv、数据库等。它会自动处理子对象。
如果您有兴趣,请使用 svn 版本,而不是 sourceforge 下载,因为它具有更多功能(包括部分 D 2009 支持)。
【讨论】:
【参考方案4】:你也可以使用java中著名的hibernate。
您可以在此处找到的 delphi 端口: dHibernate
【讨论】:
【参考方案5】:JSON 是一种新的、非常紧凑的对象存储方式。 Delphi 提供了两个库:SuperObject 和 lkJSON。
【讨论】:
Delphi 2010 为 JSON 和 Datasnap 添加了一些单元,但您可以不使用 datasnap。【参考方案6】:使用来自http://www.simdesign.nl/xml.html 的 NativeXML,我完成了从/向 XML 代码读取/写入 delphi 内存对象。非常好,非常简单,这里有演示:http://www.simdesign.nl/forum/download/file.php?id=236
【讨论】:
以上是关于Delphi对象持久化,最好的方法是啥的主要内容,如果未能解决你的问题,请参考以下文章
在没有数据持久性的情况下,如何最好地在 Django 中压缩表单:最 Djangonic 的方法是啥? [关闭]