Realm на Android doesn't support model inheritance/polymorphism.Обмен областями Realm на Android
Итак, есть ли способ поделиться полями на Android? У нас есть 5 моделей, которые имеют одни и те же связанные с синхронизацией поля и код. Мы используем наследование в наших текущих моделях SQLite; если мы переключимся на Realm, наш единственный выбор для дублирования полей синхронизации по каждому из 5 классов модели?
Как обходной путь, я думаю о том, что эти классы реализуют интерфейс Syncable
с геттерами и сеттерами для общих полей, что, по крайней мере, позволяет мне совместно использовать функции синхронизации. Есть ли способ лучше?
Чтобы поделиться функциональностью синхронизации, лучше всего сделать статический класс Synchronizer
и передать его Syncable
объектов модели. Synchronizer
будут использовать интерфейс Syncable
для работы непосредственно с общими, связанными с синхронизацией объектами моделей и делегировать операции по типам полей. В качестве альтернативы я мог бы предоставить каждому объекту модели свой собственный экземпляр Synchronizer
...
Попытка найти правильный способ обойти ограничение наследования действительно расширяет мои навыки ООПа ... помощь приветствуется!
Что-то для рассмотрения - если оно не поддерживает функцию, которая вам нужна, может быть, вы должны использовать другую библиотеку? –
Вы можете использовать композицию над наследованием, как это предлагает «Банда четырех» («Шаблоны дизайна») и Джошуа Блох (Эффективная Java). В качестве побочного примечания мы рассматриваем возможность наследования, но его можно использовать только во время моделирования объекта, а не при запросе, что бы заставить его чувствовать себя калекой. Каково ваше мнение об этом? – Emanuelez
@ Emanuelez У меня возникли проблемы с выяснением того, как композиция поможет здесь ... вы предлагаете мне разделить каждый объект на две записи в Realm - один для разделяемых полей и другой для полей типа? Насколько я понимаю ограничения запросов, похоже, что это будет калечащим. Запрос абстрактных моделей работает на iOS, верно? В чем проблема Android? –