Правильный способ реализации отношений один-ко-многим в Царстве
Я изучил документацию по Realm и разбираюсь в различных классах, которые можно использовать для управления группами объектов. Из того, что я понимаю, есть RLMArrays, RLMLinkingObjects и RLMResults. Я буду использовать пример класса Blog со многими объектами класса Comments для настройки моего вопроса. Предполагая, что класс Blog может иметь 10000 объектов, а каждый объект Blog может иметь 1000 комментариев, мне не ясно, как лучше выразить отношения в Realm. Я мог бы использовать RLMArray комментариев как свойство для блога. Тогда мне придется управлять обратной связью блогов и комментариев. Это приводит меня к объектам RLMLinkingObjects, поскольку я могу выразить свойство комментариев в блоге как любые комментарии, которые ссылаются на блог. Затем возникает сложность, заключающаяся в том, что блогов и комментариев гораздо больше, чем я хотел бы создать сразу. Именно здесь опция RLMResults является привлекательной, поскольку она позволяет лениво создавать объекты. Однако это меняет природу того, как я взаимодействую с объектами, поскольку теперь я буду запрашивать комментарии, связанные с блогом, а не просто обращаться к свойству (например, blog.comments).
Здесь я упустил из виду, что все эти данные находятся на сервере, но я надеюсь сначала определить объектную модель локально (с постоянством), а затем выяснить, как сопоставить модель через REST с сервером.,
Я хотел бы получить любой вклад, мысли или предложения от пользователей Realm.
Спасибо!
1 ответ
Ага! Вы на правильном пути. Blog
объект может иметь несколько Comment
объекты, назначенные ему, поэтому целесообразно использовать RLMArray
недвижимость в Blog
управлять всеми своими комментариями. Вы можете использовать RLMLinkingObjects
чтобы проверить какие Blog
возражать против Comment
принадлежит.
@interface Comment : RLMObject
@property (readonly) RLMLinkingObjects *blog;
@property NSString *message;
@end
@implementation Comment
+ (NSDictionary *)linkingObjectsProperties {
return @{
@"blog": [RLMPropertyDescriptor descriptorWithClass:Blog.class propertyName:@"comments"],
};
}
@end
RLM_ARRAY_TYPE(Comment)
@interface Blog : RLMObject
@property RLMArray<Comment *><Comment> *comments;
@end
@implementation Blog
@end
RLMArray
ведет себя так же, как RLMResults
; это лениво загружает данные и является живой ссылкой на базовый контент. Так что вы можете легко положиться на RLMArray
в этом случае без каких-либо забот.:)
Хотя официальных решений не существует, существует множество сторонних библиотек, которые помогают отображать данные JSON из API-интерфейсов REST в Realm (например, https://github.com/matthewcheok/Realm-JSON), поэтому их стоит проверить. их. В любом случае, если схема локально и удаленно относительно похожа, вы сможете отобразить ее без особых проблем.
Я надеюсь, что это помогло!