持久化对象的最佳模式是什么?

时间:2014-01-07 13:28:13

标签: java design-patterns persistence dao

我需要持久化对象,并希望尽可能保持数据类的清洁。持久化类不具有任何业务逻辑代码,而只包含具有getter / setter的数据。

我目前正在使用Observer模式实现解决方案。每次修改一个Observable持久化对象时,它都会向一个负责持久性的Observer对象发出一条消息。这样,持久化对象的唯一约束是“Observable”。它保持清洁。

另一个解决方案(可能更好?)将实现一些DAO模式,我不太了解它的工作方式。也许它看起来像persistedObject.save();persistedObject.readById(id);。但这意味着我必须定义一些DAO接口,然后在每个持久化类中实现read / create / update / delete方法

3 个答案:

答案 0 :(得分:1)

这个问题有很多很多很多的答案,数据序列化或持久性是软件工程中的核心问题。选项包括使用数据库,内存映射文件,二进制和文本格式等。

我个人最喜欢的快速持久对象是GSON,但是你的用例会决定什么最适合你。

你提到了想要持久化Java对象的设计模式,虽然这些模式和库一样多,但这里有几个一般建议:

  • 使用不可变对象
  • transient关键字用于重建对象所不需要的任何字段
  • 避免定义完整性检查或以其他方式限制对象中可接受值的范围 - 从反序列化调用构造的实例可能无法正确触发您的检查,从而允许构造可能无效的对象
  • 如果您需要更多的健全性检查,请使用可序列化对象构建更复杂的对象,例如:序列化StubPerson POJO,并且只有存根的值有效时,才能从Person构造StubPerson个对象

答案 1 :(得分:0)

我不知道它是否适合你,但由于你只有bean类,你可以使用Java persistence api

答案 2 :(得分:0)

DAO模式是管理数据访问和持久性的最佳模式,因为它是专门为此设计的。

考虑到您的需求,您可能需要将其与某些工厂模式相结合,以便管理不同的实现(持久性适配器)。

我不知道您的要求,但如果您的应用程序可以被许多人同时使用,您将不得不关心并发访问并定义策略(事务,锁定等等...否则人们将覆盖数据彼此)。

关于您的问题,我建议JDOdata nucleus作为实施方案),但学习曲线可能过于昂贵,无法满足您的有效需求。