Подтвердить что ты не робот

Абстрактные объекты Parse?

Я хочу использовать Parse (parse.com) в своем приложении. Parse использует модели PFObject. Я бы хотел использовать свои собственные модели во всем моем коде (чтобы он не зависел от разбора). Если возможно, я хотел бы создать свое приложение, чтобы я мог заменить синтаксис другим облачным сервисом как можно более плавным, если захочу.

Это хорошая идея? Какой лучший способ абстрагировать хранилище модели, чтобы в моем приложении не было (или минимальных) следов кода Parse?

Возможно, используйте шаблон дизайна адаптера для сопоставления объектов разбора с моими собственными объектами? Должен ли это быть независимым классом или частью логики модели?

Если кто-то попробовал что-то подобное, я хотел бы услышать ваши мысли. Должен ли я просто использовать модели синтаксического анализа непосредственно в моем коде? Или, может быть, singleton factory для создания моих моделей на основе объектов синтаксического анализа?

Любые советы/мысли/комментарии?

4b9b3361

Ответ 1

Я нашел относительно чистый способ управлять этим.

В принципе, я создал протокол под названием NPDictionaryRepresenting, для которого классы могут соответствовать, чтобы указать, как они должны быть преобразованы в словарь или инициализированы из словаря.

@protocol NPDictionaryRepresenting <NSObject>
- (NSDictionary *)dictionaryRepresentation;
+ (id)objectWithDictionaryRepresentation:(NSDictionary *)dictionary;
@end 

Каждая из моих моделей, которые мне нужны в Parse, будет соответствовать этому и реализовать свое собственное поведение. Этот протокол абстрагируется с помощью словарей, поэтому он никак не зависит от Parse.

Затем я применил базовый класс NPNetworkAdapter для обработки всего сетевого хранилища. Я также внедрил класс NPParseNetworkAdapter, который наследуется от NPNetworkAdapter. Это единственный класс, который ничего не знает о Parse. Его интерфейс имеет дело с объектами, которые соответствуют NPDictionaryRepresenting. Сетевой адаптер разбора способен создавать PFObjects, извлекая словарные представления моих объектов. И наоборот, он способен извлекать PFObjects и возвращать мои собственные модели, создавая их с помощью словарей.

Недостатком этой реализации является то, что она не очень хорошо работает с объектными отношениями (но я над этим работаю).

Если у кого-нибудь есть комментарии по этому подходу, я бы хотел их услышать.

Ответ 2

Я понимаю, что это старый вопрос, но я занят работой над проектом, который ставит эту ту же проблему, поэтому я думал, что буду комментировать. Во-первых, я думаю, что вам удалось выявить это и попытаться избежать слишком сильного сочетания кода с Parse.

Маршрут, который я решил взять, - использовать Protocols (Интерфейсы) для моих классов моделей, причем базовая реализация - это объекты Parse - с помощью Функция подкласса parse; Я объединил это с использованием классов factory, чтобы отделить создание объектов и особенности реализации от большинства моего кода приложения. Это может показаться излишним и требует немного дополнительного кода, однако я полагаю, что он выплатит дивиденды за тестирование, и если придет время изменить способ доступа к внутренним услугам.

Другой альтернативой для меня было использование классов-оболочек, которые только что завернули PFObjects. Однако в моем случае классы-оболочки были бы просто тупыми классами делегирования без дополнительного преимущества Protocols для тестирования, поэтому я придерживался подхода Protocols.