GreenDao 和实体继承

GreenDao and entity inheritance

我的任务是在 Android OS 上为我的应用程序创建磁盘缓存(它是某种信使)。我想将消息存储在数据库中,但遇到了存储不同类型消息的问题(目前有 5 种类型的消息,每种类型都有自己的字段,它们都扩展了基 class)

GreenDao documentation 说:

Note: currently it’s impossible to have another entity as a super class (there are no polymorphic queries either)

我计划拥有几乎与基础 class 一对一的实体,除了一列 - 原始二进制或 json 数据,其中每个 child class可以写任何它需要的东西。

我的问题是:

  1. GreenDao 在这种情况下是好的解决方案吗?是否有任何解决方案可以让您不必担心继承 - 以及它们在效率方面的成本是多少。
  2. 如何 "serialize" 数据到这样的字段(我应该覆盖什么方法或者我应该把我的代码放在哪里,它将做所有必要的事情
  3. 如何给 GreenDao 正确的构造函数 "deserialize" Json 或二进制来正确 class 实例
  4. 我应该使用反射 - 或者只是 switch/case 来找到正确的构造函数(只有 5 种类型的构造函数是可能的) - 在这种情况下反射 "cost" 会有多少反射?

如果你真的需要继承 greendao 不是我的选择,因为它不支持它。但我认为你可以不继承:

您可以设计一个具有鉴别器列(消息类型)和二进制或文本列(数据)的实体。然后您可以使用抽象工厂根据消息类型从数据创建所需的对象。

如果转换很复杂,我会把它放在一个单独的 class 中,否则我会把它作为一个方法放在 keep 部分。

请注意,如果您确实有很多邮件,这种设计可能会降低您的速度,因为单独的表会减少索引大小。 谈论索引:如果您想稍后通过数据列的某些 属性 访问一条消息,那您就完蛋了,因为您无法在其上放置索引。