J'ai ce scénario de cas d'utilisation:
Il y a des endroits qui sont des terrains de jeux, des restaurants, des théâtres, des pubs.
Le même endroit Utilisez des clés étrangères p>
héritage multilité p>
Utilisez la classe abstraite p>
Utilisez des modèles proxy p>
Quels sont les avantages et les inconvénients d'utiliser chaque approche? p> p> code> peut avoir des terrains de jeux, des restaurants, des théâtres, etc.
Il y a quelques façons de la mettre en œuvre:
4 Réponses :
Je voterais pour une classe abstraite si le domaine dicte qu'un Mais si un J'imagine que les pro et des con sont tournés autour de votre penchant des tables de base de données parasites. Comment l'orèse met-elle en œuvre ces solutions? Personnellement, je n'aime pas avoir beaucoup de tables de champs simples mais YMMV. P> place code> ne peut pas exister s'il n'existe pas au moins l'un des autres. P>
place code> n'a pas besoin de quelque chose que vous auriez besoin de multiples héritage pour accueillir les placards (lots vacants)? P>
Je voterais pour le premier, car c'est le plus explicite. Et je ne vois aucune advacité d'autres méthodes. P>
Cela dépend entièrement de quel type de comportement dont vous avez besoin. p>
Avez-vous besoin d'effectuer les mêmes types d'opérations sur des endroits et des restaurants ou des terrains de jeux? Voulez-vous vérifier si vos services (restaurants, etc.) sont au même endroit? Est-il significatif de traiter deux endroits avec la même adresse que différent et leurs services associés différents? P>
Sans connaître les réponses à ces types de questions, il est impossible de dire quelle est la technique la plus appropriée, comme L'utilisation de l'héritage ne doit pas être dictée par une notion pré-conçue sur la taxonomie, car elle n'est pas là pour modéliser la taxonomie: il est là pour fournir un polymorphisme de la fonction (héritage des membres de données est principalement de faciliter cela). p>
Le premier est em> l'héritage des modèles essentiellement, car c'est ce que la mise en œuvre de Django de MTI utilise (sauf que c'est un Chaque fois que vous avez un est-un em> relation (c'est-à-dire un restaurant est un lieu), vous avez affaire à héritage, vous utilisez donc l'une des méthodologies de modèle de modèle de Django, c'est la voie à suivre. Chacun, cependant, a ses avantages et ses inconvénients: p>
Modèles abstraits forts> p>
Les modèles abstraits sont utiles lorsque vous souhaitez simplement charger des champs et / ou des méthodes répétitifs. Ils sont mieux utilisés comme mixes, plus que de vrais "parents". Par exemple, tous ces modèles auront une adresse, créant ainsi un modèle d'adresse code> abstraite code> et d'avoir chaque hérité de ce qui pourrait être une chose utile. Mais, un restaurant code> n'est pas une adresse MTI (héritage multiple de table) strong> p>
C'est celui qui s'apparente à votre premier choix ci-dessus. Ceci est très utile lorsque vous devez interagir avec les classes des parents et des enfants et que les enfants ont des domaines uniques de leurs propres (champs, non méthodes). Ainsi, un restaurant code> peut avoir une cuisine code> Cuisine CODE>, mais un lieu modèles proxy forts> p>
Les modèles proxy sont comme des alias. Ils ne peuvent pas avoir leurs propres champs, ils ne reçoivent que les champs du parent. Cependant, ils peuvent avoir leurs propres méthodes. Celles-ci sont donc utiles lorsque vous devez différencier les types de la même chose. Par exemple, je pourrais créer des modèles proxy tels que Pour votre scénario, les modèles proxy n'ont pas beaucoup de sens. Les enfants sont intrinsèquement plus compliqués que le parent et il ne serait pas logique de stocker tous les champs tels que vous pourrait em> utiliser un modèle code> abstrait code>, mais vous perdez ensuite la possibilité de fonctionner réellement Votre meilleur pari utilise un héritage normal: MTI. Vous pouvez ensuite créer une clé étrangère sur oneoonefield code> au lieu d'un fournedget code>, Mais c'est simplement un fournedgey code> c'est unique). P>
code>, en soi, il ne s'agit donc pas d'une vraie relation parent-enfant. P>
code> n'aurait pas besoin de cela. Cependant, ils ont tous les deux une adresse, donc restaurant code> hérite et se détache de place code>. P>
Staffuser code> et normaliseur code> à partir de utilisateur code>. Il n'y a toujours qu'une seule table utilisateur, mais je peux maintenant ajouter des méthodes uniques à chacun, créez deux vues administratives différentes, etc. P>
Cuisine Code> pour Restaurant code> sur Place Code>. < / p>
place code> seul. Lorsque vous souhaitez une clé étrangère à un "lieu" généralisé, vous devrez utiliser des clés étrangères génériques, à la place, de pouvoir choisir parmi les différents types de places, ce qui ajoute beaucoup de frais généraux, si ce n'est pas nécessaire. p>
place code> et ajouter quelque chose qui est un enfant de Place code>. P>
Vous devez nous en dire plus sur ce que vous faites avec ces objets et classes avant de pouvoir vous aider.
Eh bien, si vous regardez dans cela, je voulais juste demander quelle méthode de mise en œuvre est préférée à quel endroit? C'est plus une question architecturale.
La question "architecturale" ne peut pas être répondue dans le résumé.