2016-03-05 64 views
3

在我的应用程序中,我使用领域作为数据库平台。 领域到目前为止一直很棒 - 超级简单易用,查询等等 - 尽管如此,我有两个疑惑,我正试图解决这个问题。使用组合作为域(android)继承的解决方法?

1)Realm不支持扩展RealmObject的模型对象类中的继承。 - 我想知道是否有任何开发人员使用组合作为继承问题的解决方法,以及它是否适用于他们。换句话说,假设我有一个扩展RealmObject的类“汽车”,然后我有其他类,如“本田”,“丰田”等。是否有意义为每个包含本田,丰田等?

2)Realm仅支持模型对象类中的getter和setter - 我目前的解决方法是通过在模型对象类中创建静态方法。 - 换句话说,如果我想修改本田的颜色,我会打电话给Honda.updateColor(本田,蓝色)。 - ^这是马虎,还是这是处理这种方法的唯一方法。

真的任何反馈都会很棒!

+1

1)相关的Realm问题是https://github.com/realm/realm-java/issues/761。我不认为继承可以完全被构图所取代,但是在相同的情况下它可能会有所帮助。模型中的“RealmObject”和“RealmList”字段也是输入的,你不能这样做'ExtendCar extendedCar; setExtendCar(NewTypeHondaCar newCar)'2)“更好的对象”功能已经被合并到Realm的master中,它很快就会在0.88.0中发布。您可以在发布前尝试使用快照。使用此功能,您不必为'RealmObject'编写任何setter/getters。 – beeender

+0

对于1)我明白,你不能做“......扩大汽车”,虽然你可以创建一个汽车对象,它扩展了领域对象和本田对象,这也扩展了领域对象。然后,您可以创建一个包含honda对象的汽车对象,并将这两个对象设置为具有相同的唯一标识符 - 或@primarykey。这听起来像一个可行的解决方案?也为2)这真棒!我已经等了很长一段时间了。 –

+0

对于1)我认为那会奏效。 'Honda'可以有'Car'作为通用字段,在0.88.0下,'Honda'可以实现一些类似'getCarProps'的接口,这也可以由'Toyota'实现。几乎就像继承;) – beeender

回答

1

我用一种解决方法(简单地说)

组成+接口继承将使你得到一些好处多态性回你realmObjects。

一些代码示范

interface IPerson { 

    String getName(); 
} 

class Person extends RealmObject implements IPerson { 

    String name; 

    @Override 
    public String getName() { 
     return name; 
    } 
} 

interface IWorker extends IPerson { 
    int getSalary(); 
} 

class Worker extends RealmObject implements IWorker { 

    Person person; 
    int salary; 

    @Override 
    public String getName() { 
     return person.getName(); 
    } 

    @Override 
    public int getSalary() { 
     return salary; 
    } 
} 

注意

PrimaryKeys不幸地被复制。

请查看我的answer以获得有关此解决方法的更多详细信息。