2015-07-27 1 views
2

Dans la plupart des exemples, le modèle de stratégie est généralement bon pour les algorithmes de compression/algorithmes de codec, où ces algorithmes peuvent avoir un code assez différent.Stratégie Le modèle avec stratégies contient un code similaire

Cependant, dans mon cas, les algorithmes de statistiques que je veux refactoriser au modèle de stratégie, ont 50% de code similaire ou exactement le même. Je me demandais comment les gens traitent cela? Si j'utilise un modèle de stratégie, il se peut que 50% du code soit copié, ce qui n'est pas souhaitable. Si ce n'est pas refactor, le code se termine avec de nombreux ensembles de if-else tout autour pour gérer différents types d'algorithmes de statistiques. Comment évaluer le compromis? Quelles pourraient être d'autres solutions possibles?

Répondre

4

L'objectif final n'est pas de réduire autant que possible la duplication de code. L'objectif est de rendre le code maintenable. Vous devez vous demander si la réduction de cette duplication rendrait les implémentations de stratégie plus faciles ou plus difficiles à gérer.

Si la réduction de la duplication rend le code plus difficile à maintenir, alors gardez la duplication, mais peut-être trouver un autre moyen d'atténuer l'inquiétude (la documentation et les tests sont deux façons possibles). Si la réduction de la duplication facilite le maintien du code, pensez aux moyens possibles de supprimer la duplication (délégation, comme avec Strategy and Decorator, héritage, comme avec Template Method, etc.).

3

Vous pouvez utiliser Template Method si c'est plus facile, mais il y a aussi une grande possibilité, qu'avec l'héritage, vous pouvez dériver vos stratégies concrètes à partir d'une classe de base commune contenant la majeure partie du code commun.