Entités abstraites et héritage dans les données de base
J'ai un modèle de données pour les courses de Formule 1 avec 3 entités:
- RacingActor: entité Abstraite
- Pilote: hérite de RacingActor
- Équipe: hérite de RacingActor
Si je générer NSManagedObject
des sous-classes pour représenter ces entités, le code généré ne représente pas du tout cette conception:
- Tout hérite de
NSManagedObject
- Rien ne m'empêche de l'instanciation de RacingActor
- L'équipe de la propriété dans le projet Pilote est de type
NSManagedObject
à la place de l'Équipe de
Est-ce le comportement attendu? Suis-je censé corriger le code généré par Xcode? Ai-je raté quelque chose?
BTW, je suis en utilisant Xcode 4.3.3
source d'informationauteur cfischer
Vous devez vous connecter pour publier un commentaire.
De base de Données à la base est un mapping objet-relationnel de la bibliothèque. Il y a longtemps, il a été appelé l'Entreprise Objet de la structure, de WebObjects.
Donc oui, l'objet de base pour toute persistante objet géré par la Base de Données est
NSManagedObject
et vous pouvez faire ce que vous voulez avec eux.Dans votre exemple, l'Équipe et les Pilotes vont partager un tableau, et vous serez en mesure d'utiliser des requêtes pour récupérer les Équipes et les Pilotes à la fois. C'est l'idée.
L'Objective-C arbre d'héritage (si vous utilisez des classes personnalisées) peut refléter le modèle que vous avez défini, mais il n'est pas nécessaire. Vous pouvez créer un
RacingActor
classe, l'utiliser comme une classe de base pour personnaliséTeam
etPilot
classes, ou vous pouvez dire le modèle à utiliserRacingActor
pourTeam
etPilot
objets. Vous pouvez même définir une totalement indépendante de la classe de base (à conditionNSManagedObject
est un parent, directement ou indirectement) pourTeam
et /ouPilot
si vous le souhaitez.Puis libre à vous de mettre en œuvre les comportements spécifiques dont vous avez besoin dans une logique d'entreprise, que ce soit dans les contrôleurs ou dans des classes de données personnalisées.