est-ce une pratique raisonnable d'étendre une classe juste pour réutiliser une seule fonction?


10

Je développe une gamme de filtres post pour un site wordpress, et j'ai construit les 4 premiers avec une seule classe.

Les deux derniers ont une portée suffisamment différente pour ne partager qu'une seule fonction (la fonction de production des liens finaux) dans leurs classes.

Est-il raisonnable, dans ce cas ou dans un certain nombre de cas hypothétiques similaires, d'étendre la classe d'origine afin d'avoir cette fonctionnalité, ou existe-t-il un meilleur moyen?


Je ne comprends pas cette question. Que voulez-vous dire par construire des choses avec une classe? Ces classes héritent-elles de quelque chose? La classe au sommet de la hiérarchie n'aurait-elle pas déjà la fonction commune?
David Thornley

Réponses:


19

Non, si les deux classes sont si différentes qu'elles ne partagent qu'une seule fonction, il y a de fortes chances qu'elles ne soient pas interchangeables - et donc elles briseraient le principe de la sous- station liskov .

Dériver d'une classe de base uniquement s'il est logique de le faire. Le partage d'un seul morceau de code est rarement une justification de l'héritage :)

Dans cet exemple particulier, il semble que vous souhaitiez réutiliser cette fonction via la composition à la place ...


3
Préférez la composition à l'héritage! Dans la plupart des cas, cela vous simplifiera la vie à long terme.
Travis

Composition FTW!
back2dos

Il convient de noter que ma réponse est essentiellement la même que @Sardathrion, je viens de faire le lien avec les principes pertinents :)
MattDavey

7

Si une description de classe contient le mot « et », elle doit être divisée en deux (ou plus) classes. À première vue, vous pourriez faire de cette fonction un membre d'une autre classe référencée par celles que vous avez actuellement.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.