2017-01-23 5 views
0

私はむしろレルムに直面しています。私はREST APIとレルムオブジェクトに格納する間のやりとりに適したデザインを見つけようとしています。これまでのところ、私は以下のように見えるAnimalオブジェクトを持っている:realmオブジェクト内に2つの接続関係があります

class Animal: Object, Mappable { 
    dynamic var id = "" 
    dynamic var userId = "" 
    dynamic var name = "" 
    dynamic var gender = "" 
    dynamic var breed: Breed? 
    dynamic var type: Type? 

    //extra 
    var mainPhotoIndex = 0 


    override static func primaryKey() -> String? { 
     return "id" 
    } 


    required convenience init?(map: Map) { 
     self.init() 
    } 

} 

問題はタイプが意味するすべての品種のリストで構成されているので、私は私がTypeBreed関係を扱うことができるかわからないということですが対応する品種名と型名を持つ動物を取得するためには、サーバー側でこれらの2つのプロパティを設定する必要があります。これは、動物オブジェクトの上でJSONオブジェクトを大きくすると、Typeの2つの名前Breed。私が見つけたもう1つのアプローチは、String ObjectIdを保存してから、領域IDデータベースでそのIDをフィルタリングすることですが、これがベストプラクティスであるかどうかはわかりません。だから私はここでサーバー側を渡す必要があります、私はどのように私の動物の領域オブジェクトを設計する必要がありますか?

タイプ

class Type: Object, Mappable { 
    dynamic var id = "" 
    dynamic var name = "" 
    var breeds = List<Breed>() 

    override static func primaryKey() -> String? { 
     return "id" 
    } 

    required convenience init?(map: Map) { 
     self.init() 
    } 

} 

品種

class Breed: Object, Mappable { 
    dynamic var id = "" 
    dynamic var name = "" 

    override static func primaryKey() -> String? { 
     return "id" 
    } 

    required convenience init?(map: Map) { 
     self.init() 
    } 

} 
+0

あなたのクラス定義は正しいです。巨大なJSONの問題を解決するには、サーバーとの間で投稿/取得するときに、TypeとBreedにIDを渡すだけです。 すべてのタイプと品種は、あなたの/ typesエンドポイントからローカルデータベースに保存されているので、特定の動物を作成するときにそれらをIDで取得し、動物のプロパティとして割り当てることができます。 –

+0

私は、IDを文字列として保存することが領域では良い練習であることを確信していないと考えました –

+0

なぜ文字列として保存するのですか?整数は正しい選択肢になる可能性があります –

答えて

0

あなたは完全に正しいです。あなたのスキーマは正しい方法で設定されていますが、そのマッピングで正しいのはAnimalで、JSON文字列からはTypeBreedのすべてを含める必要があります。しかし、これを妥協することは可能です。

TypeBreedのように聞こえるのは、完全に静的なデータの2つで、Animalからかなり独立しています。また、主キーも持っています。それで、すべての場合には、あなたが必要とする初めてのとTypeの内容をすべてダウンロードし、それをRealmにローカルに保存することをお勧めします。その後

あなたがAnimalを要求する場合、必ず、BreedTypeオブジェクトの内容を含むJSON文字列の内容の代わりではなく、単純に必要なオブジェクトの主キーを含めることができます。次に、ObjectMapperでマッピング操作を実行するときに、手動でこれらの2つのキーを取得し、Realmに適切なオブジェクトを照会し、それらをディスク上の完全にローカルにリンクすることができます。

関連する問題