16-03-2009, 08:33 AM
Bonjour tout le monde,
Depuis quelques jours, je me pose quelques questions sur le stockage en base de données de relations héritées.
Je m'explique. Imaginons un jeu avec des objets : leur modèle (abstrait) est la classe Item. Mais on a également plusieurs modèles qui hérite de Item, tels que Equipment et Consumable qui représentent respectivement des pièces d'équipement et des consommables (genre nourriture et potions).
L'idée est d'avoir une généricité quand on récupère la liste des objets : l'inventaire est par exemple un conteneur d'objets de type Item (mais en pratique, on n'aura jamais de items puisque c'est une classe abstraite).
Et je ne veux en aucun cas récupérer les consommables, puis les équipements, etc.
Que faire alors ? Un champ type dans la table qui stock les items, afin de savoir quelle classe instancier pour chaque objet (à l'aide d'une Factory, par exemple) ?
Voilà, j'attends votre avis sur la question.
Après, il me faudra encore gérer Rails puisque mon modèle ne pourra pas étendre la classe ActiveRecord et la classe Item à la fois... Les interfaces, peut-être ?
Sephi-Chan
Depuis quelques jours, je me pose quelques questions sur le stockage en base de données de relations héritées.
Je m'explique. Imaginons un jeu avec des objets : leur modèle (abstrait) est la classe Item. Mais on a également plusieurs modèles qui hérite de Item, tels que Equipment et Consumable qui représentent respectivement des pièces d'équipement et des consommables (genre nourriture et potions).
L'idée est d'avoir une généricité quand on récupère la liste des objets : l'inventaire est par exemple un conteneur d'objets de type Item (mais en pratique, on n'aura jamais de items puisque c'est une classe abstraite).
Et je ne veux en aucun cas récupérer les consommables, puis les équipements, etc.
Que faire alors ? Un champ type dans la table qui stock les items, afin de savoir quelle classe instancier pour chaque objet (à l'aide d'une Factory, par exemple) ?
Voilà, j'attends votre avis sur la question.
Après, il me faudra encore gérer Rails puisque mon modèle ne pourra pas étendre la classe ActiveRecord et la classe Item à la fois... Les interfaces, peut-être ?
Sephi-Chan