Pour chaque produit, il y a des calculateurs de coûts associés tels que: remise, remise par le marchand, bonus par le commerçant, remise mensuelle etc. À l'avenir, plus de calculateurs de coûts seraient ajoutés.Décorateurs de coûts
Nous avons une classe de produit concret et beaucoup de décorateurs pour chaque calcul de coût. Tous les produits doivent utiliser toutes les calculatrices, car les calculatrices décident d'appliquer leurs calculs par les propriétés du produit comme l'identifiant du marchand, l'identifiant de catégorie, la couleur, etc.
Et il y a des millions de produits dans notre système qui doivent être calculé. Donc, nous ferions mieux de mettre en cache les calculatrices décorées. Car, décorer chaque entité de produit en cours d'exécution serait coûteux. Mais c'est dur avec un motif de décorateur. Cela ressemble à une odeur d'utiliser ce modèle dans notre situation.
Que suggérez-vous? Devrions-nous utiliser des décorateurs, une stratégie ou un modèle de chaîne de responsabilité? Ou pas de motif.
Les décorateurs font des calculs en fonction des propriétés du produit, nous bouclons sur une liste de produits pour appliquer ces calculs à tous les produits. Donc, en décorant chacun de ces produits à chaque itération, nous avons pensé que la mise en cache de la logique de calcul serait une bonne idée. Mais c'est difficile à faire avec des décorateurs. Donc, une meilleure approche serait d'utiliser le modèle de stratégie comme ensemble/obtenir sur le produit. Produit p = nouveau Produit(); p.setCalculationStrategy (listOfCalculators); p.price(); // invoquera toutes les calculatrices, seules les calculatrices intéressées calculeront –
p.price() { return listOfCalculators.price(); } listOfCalculators.price() { chaque calculatrice do {// .... } prix de retour; } –