2017-01-23 64 views
0

我是相當新的境界,我試圖找出我的REST API之間的相互作用正確的設計,並存儲到境界的對象。到目前爲止,我有一個Animal物體看起來像如下:兩個連接關係對象

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關係,因爲類型包括所有的品種,這意味着名單中爲了檢索與相應的品種名稱的動物,並鍵入名字,我將不得不填充在服務器端這兩個屬性,這將使JSON對象巨大的時候我的動物對象上只需要檢索Type的兩個名字和Breed。我發現的另一種方法是保存String ObjectId,然後在領域數據庫中通過該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。 所有類型和品種已經堅持本地數據庫從你的/端點類型,這樣你就可以通過ID,創建一個特定的動物時找回它們,並將它們分配爲您的動物的屬性。 –

+0

我想過那只是不確定保存身份證的字符串是在領域的良好做法 –

+0

爲什麼要保存爲字符串呢?整數可能是正確的選擇 –

回答

0

你是完全正確的。您的架構是建立在以正確的方式,但你從一個JSON字符串映射Animal是正確的就需要有從TypeBreed包括一切爲好。但是應該可以在這方面妥協。

聽起來像TypeBreed是兩套完全靜態的數據,幾乎獨立於Animal。他們也有主鍵。這一切都這樣的話,我會建議下載所有的Breed並且您需要Type內容和本地保存到境界你第一次需要。

在此之後,每當你請求Animal,JSON字符串而不是包括BreedType對象的內容的內容可以簡單地代替包含必要的對象的主鍵。然後,在ObjectMapper中執行映射操作時,可以手動獲取這兩個鍵,查詢Realm以獲取適當的對象,然後在磁盤上完全在本地鏈接它們。

相關問題