Взаимодействие с CoreData ManagedObject и моделью приложения - PullRequest
0 голосов
/ 18 января 2019

У меня есть набор объектов, которые я использую в качестве DTO, и это объекты, которые я создаю из JSON и получаю из бэкэнда. Например, у меня есть объект «Пользователь», который представляет всех пользователей в базе данных. Я получаю их службой отдыха через JSON и конвертирую в объект User.

Все эти DTO имеют один и тот же базовый класс, называемый "BaseDTO".

С другой стороны, я представляю эти объекты в Базовых данных, потому что мне нужно сохранить их на диске.

Моя проблема в том, что когда я создаю сущность в CoreData, она наследуется от NSManagedObject.

По этой причине я должен создать, например, объект "Пользователь", который является его DTO и "UserCoreData", что его сущность coreData и оба имеют одинаковые поля.

Когда я хочу сохранить «Пользователь» в CoreData, я получаю объект «Пользователь» и методом в классе «UserCoreData» создаю «UserCoreData» полями объекта «Пользователь», которые я передаю методу.

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

1 Ответ

0 голосов
/ 18 января 2019

Итак, что вы можете сделать, в зависимости от того, что делает ваш базовый класс DTO, - это извлечь определенные функции из него в протокол и добавить реализацию по умолчанию в расширение протокола.

Тогда ваш подкласс NSManagedObject может принять этот протокол, и таким образом вы сможете использовать функциональные возможности DTO, когда это необходимо. Если это не вариант, нет другого способа, кроме как иметь дубликаты определений модели.

И тогда это зависит от вашего варианта использования, и вы должны спросить себя, действительно ли вам нужно использовать CoreData. Просто для сохранения текущих данных на диске есть и другие опции, такие как Codable. CoreData отлично подходит, если вам нужно изменить объекты и запросить частичные данные, а также получать уведомления об изменениях. Но просто для сохранения целых объектов иногда бывает слишком много.

...