我的任务是为我的应用程序在Android OS上进行磁盘缓存(这是某种使者).我想将消息存储在数据库中,但是遇到了存储不同类型消息的问题(当前有5种消息类型,每种类型都有自己的字段,并且它们都扩展了基类)
绿岛documentation说:
注意:目前不可能将另一个实体作为超类(也没有多态查询)
我计划拥有一个几乎与基础类一对一的实体,除了一列-原始二进制或json数据,每个子类都可以在其中写入所需的任何内容.
我的问题是:
>在这种情况下,GreenDao是一个很好的解决方案吗?有没有可以不用担心继承的解决方案-在效率方面花费了多少钱.
>如何将数据“序列化”到这样的字段(我应该重写哪种方法,或者应该在哪里放置代码以完成所有必要的操作
>如何为GreenDao提供正确的构造函数以“反序列化” Json或二进制以更正类实例
>我应该使用反射-还是仅使用switch / case来查找正确的构造函数(只能使用5种类型的构造函数)-反射在这种情况下会反射多少“成本”吗?
解决方法:
如果您真的需要继承,那么greendao不是我的选择,因为它不支持继承.但我认为您可以不继承:
您可以设计一个带有鉴别符列(消息类型)和二进制或文本列(数据)的实体.然后,您可以使用抽象工厂根据消息类型从数据创建所需的对象.
如果转换很复杂,则将其放在单独的类中,否则将其作为方法保留在keep部分中.
请注意,如果您确实有很多消息,此设计可能会减慢您的速度,因为单独的表会减小索引的大小.
谈论索引:如果您以后想要通过数据列的某些属性访问消息,则会因无法在其上放置索引而感到困惑.