Je pensais que je posterai ceci à la communauté. J'utilise Coredata et j'ai deux entités. Les deux entités ont une relation hiérarchique. Je remarque pas beaucoup de fonctionnalités dupliquées maintenant et je me demandais si je devrais ré-structurer pour avoir une entité de base qui est abstraite (hiérarchiqueObject) et que mes entités héritent d'eux. P>
La question est-elle si la question est là quelques limitations de ce héritage que je devrais prendre en compte? Lecture des postes là-bas, je vois quelques compromis, laissez-moi savoir si mes hypothèses sont correctes. P>
Y a-t-il d'autres choses à prendre en compte? P>
Merci pour vos commentaires. P>
3 Réponses :
J'ai eu des problèmes dans le passé avec la migration de données de modèles qui avaient hérité - vous voudrez peut-être expérimenter avec cela et voir si vous pouvez le faire fonctionner. P>
Comme vous l'avez noté aussi, tous les objets vont dans une table. P>
Toutefois, comme les données principales gèlent un graphique d'objet, il est vraiment agréable de garder la structure comme vous le feriez naturellement de modéliser les objets - ce qui inclut l'héritage. Il y a beaucoup à dire pour garder le modèle sain d'esprit afin que vous fassiez moins de travail dans le maintien du code. P>
J'ai utilisé personnellement un modèle de CD assez complexe avec héritage dans l'une de mes propres applications, et elle a fonctionné correctement (en dehors de, comme je l'ai dit avoir des problèmes avec la migration de données, mais cela a été aussi facile pour moi en général I Ne comptez plus sur cela qui fonctionne plus). P>
Je pense que c'est une erreur de dessiner pour fermer un parallèle entre entités et classes. Bien que très similaires, ils ont des différences importantes.
La différence la plus importante est que les entités n'ont pas de code comme une classe le feraient donc lorsque vous avez des entités avec des attributs en double, vous n'ayez pas ajouté beaucoup de codage supplémentaire et potentiel d'introduction de bugs. P>
Beaucoup de gens croient que l'héritage de classe doit être parallèle au héritage de l'entité. Ce ne est pas. Tant que une classe descend de NsmaniedObject et répond aux messages de la valeur de la clé de l'entité qui représente, la classe peut avoir de nombreuses aventures joyeuses dans son héritage qui ne sont pas reflétées dans l'héritage des entités. Par exemple. Il est assez courant de créer une classe de base personnalisée juste en dessous de NsManèdeObject et de toutes les sous-classes d'objet gérées ultérieures héritées de ce que quelles que soient leurs entités. P>
Je pense que la seule fois que l'héritage de l'entité est absolument nécessaire, c'est quand vous besoin d'entités différentes à apparaître dans la même relation. E.g: p> maintenant le propriétaire.veHical peut contenir un objet À la fin, les entités ne sont que des instructions sur le contexte pour le dire comment le graphique d'objet s'intègre ensemble. Tant que votre disposition de votre entité fait que cela se produise, vous avez une grande flexibilité dans les détails de la conception, un peu plus que vous n'auriez dans une situation analogue avec des classes. p> p> objet code> ou un objet
voiture code>. Notez que l'héritage de la classe d'objet gérée pour
Motocycle code> et
voiture code> ne doit pas être identique. Vous pourriez avoir quelque chose comme
Motocycle: Twowheheeled: NsmanagedObject Code> et
Voiture: Awheheheeled: NsmanagedObject code> et tout fonctionnerait bien. P>
Merci pour l'explication détaillée! Dans mon cas, ce ne sont pas vraiment des entités liées, plus pour le code "nettoyage" et de garder le modèle sain d'esprit. Mais compte tenu de vos commentaires, et que Kendall, je vais juste le laisser tel qu'il est. Pas une énorme quantité de code, et ne veut pas vraiment faire face aux côtés potentiels. Merci encore!
Je pensais qu'il serait utile de mentionner que l'application Notes sur iOS 10 utilise l'héritage dans son modèle de données de base. Ils utilisent une synchronisation d'entité de base, qui comporte 7 sous-entités, notamment la note et le dossier. Et comme vous avez mentionné toutes ces personnes sont stockées dans la même table SQLite qui comporte des colonnes à 106 colonnes, et car elles sont partagées entre toutes les entités, la plupart sont NULL. Ils ont également mis en place le dossier-notes sur une relation à une autre en tant que plusieurs à plusieurs, ce qui crée une table de pivotement, ce qui pourrait être un travail autour d'un problème de succession. P>
Il y a quelques avantages à utiliser l'héritage de l'entité qui l'emportent probablement sur ces limitations de stockage. Par exemple, une contrainte unique peut être unique entre les entités. Et une demande de récupération peut renvoyer différentes entités faisant une interface utilisateur qui utilise un contrôleur de résultats récupéré plus simple, par ex. regroupement par comptes ou dossiers dans une barre latérale. p>
Avez-vous une source à ce sujet? J'aimerais en savoir plus à ce sujet