0 votes

Polymorphisme et héritage (exemple de cas problématique)

J'essaie toujours de me familiariser avec les modèles de conception et, pour la deuxième fois, je me heurte au même problème qui semble réclamer une solution basée sur un modèle.

J'ai un système de comptes avec plusieurs types de comptes. Nous avons des types de comptes restaurant, hôtel, fournisseur de services et consommateur. Je suis sûr qu'il y aura d'autres types de comptes professionnels à l'avenir, et bien sûr, il y a un compte d'administrateur global.

Je me demande donc comment mettre en œuvre le changement de type de compte. Par exemple, chaque compte aura un ou plusieurs profils, mais le profil sera différent selon le type de compte. Quel type de relation de classe dois-je utiliser ici pour gérer les multiples types de compte - polymorphisme ou héritage ?

Il semble qu'il devrait y avoir une classe de profil de base abstraite que les autres profils devraient étendre, mais je ne suis pas sûr de savoir comment l'implémenter (par exemple, une table de jointure entre les types de profils et les types de comptes ?)

C'est aussi l'occasion de mettre en œuvre le modèle de l'usine, mais je ne sais pas vraiment comment m'y prendre.

Des idées, s'il vous plaît ?

*

*

Modifié pour fournir quelques exemples, comme suggéré :

Account -> hasMany   -> Users

Account -> belongsTo -> AccountType

Account -> hasOne    -> Profile

Le profil est différent selon le type de compte, par exemple un compte de type restaurant aura un menu, une carte des vins, etc., un compte de type hôtel aura des types de chambres, des équipements, un compte de type consommateur aura des goûts personnels, un pays d'origine, etc.

La question était de savoir quel modèle de conception permettrait le mieux de mettre en œuvre ces relations.

J'espère que c'est plus clair, merci !

1voto

workmad3 Points 12974

Je suggérerais l'agrégation plutôt que l'héritage pour la relation entre le compte et le profil, mais j'aurais une classe de base Compte qui est héritée dans plusieurs types de comptes.

Le compte contient un objet de profil, qui peut être défini dans le constructeur de chaque type de compte polymorphe.

Vous pouvez également intégrer la création de compte dans un modèle de fabrique ou de constructeur virtuel.

0voto

Steven A. Lowe Points 40596

Merci pour les exemples ; vous essayez peut-être de rendre la chose plus difficile qu'elle ne l'est. La solution suivante fonctionnerait-elle ?

User <<--> Account
Account <<--> AccountType
Account <--> Profile
Profile <<--> ProfileType

Je m'interroge sur la relation 1:1 entre le compte et le profil, il semble probable qu'un compte puisse se retrouver avec plus d'un profil, ou qu'un profil puisse appartenir à un utilisateur au lieu d'un compte, mais je ne sais pas vraiment ce qu'est/fait un profil dans ce contexte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X