Абстрактные объекты и наследование в основных данных

У меня есть модель данных для гонок Формулы 1 с тремя объектами:

  • RacingActor: абстрактный объект
  • Пилот: наследует от RacingActor
  • Команда: наследует от RacingActor

Если я создаю подклассы NSManagedObject для представления этих объектов, генерируемый код не представляет вообще эту конструкцию:

  • Все наследуется от NSManagedObject
  • Ничто не мешает мне создавать экземпляр RacingActor
  • Свойство команды в Pilot имеет тип NSManagedObject вместо Team

Является ли это ожидаемым поведением? Я должен исправить код, созданный Xcode? Я что-то пропустил?

Кстати, я использую Xcode 4.3.3

1 ответ

Основные данные в ядре - это библиотека реляционного отображения объектов. Долгое время он назывался Entreprise Object Framework, частью WebObjects.

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

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

Дерево наследования Objective-C (если вы используете пользовательские классы) может отражать выбранную вами модель, но это не нужно. Вы можете создать собственный класс RacingActor, использовать его как базовый класс для пользовательских классов Team и Pilot, или вы можете сказать модели использовать объекты RacingActor для Team и Pilot. Вы даже можете определить совершенно несвязанный базовый класс (если NSManagedObject является родителем, прямо или косвенно) для Team и/или Pilot, если вы хотите.

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

licensed under cc by-sa 3.0 with attribution.