2016-03-05 63 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以獲得有關此解決方法的更多詳細信息。