czy rozsądną praktyką jest przedłużenie klasy tylko w celu ponownego wykorzystania jednej funkcji?

10

Rozwijam szereg filtrów pocztowych dla witryny Wordpress i zbudowałem pierwsze 4 z jedną klasą.

Ostatnie dwa są wystarczająco różne, aby dzielić tylko jedną funkcję (funkcję tworzenia końcowych łączy) w swoich klasach.

Czy rozsądne jest, w tym przypadku lub w dowolnej liczbie podobnych hipotetycznych przypadków, rozszerzenie oryginalnej klasy w celu uzyskania takiej funkcjonalności, czy też istnieje lepszy sposób?

Łagodny Fuzz
źródło
Nie rozumiem tego pytania. Co masz na myśli, budując rzeczy z klasą? Czy te klasy dziedziczą po czymś? Czy klasa na szczycie hierarchii nie miałaby już wspólnej funkcji?
David Thornley,

Odpowiedzi:

19

Nie, jeśli dwie klasy są tak różne, że dzielą tylko jedną funkcję, istnieje prawdopodobieństwo, że nie będą się one zamieniać - i dlatego złamałyby zasadę podstawienia Liskowa .

Pochodzą z klasy podstawowej tylko wtedy, gdy jest to logiczne. Udostępnianie jednego fragmentu kodu rzadko uzasadnia dziedziczenie :)

W tym konkretnym przykładzie brzmi to tak, jakbyś chciał ponownie użyć tej funkcji poprzez kompozycję zamiast ...

MattDavey
źródło
3
Wolę kompozycję niż dziedziczenie! W większości przypadków ułatwi to życie na dłuższą metę.
Travis,
Skład FTW!
back2dos,
Warto zauważyć, że moja odpowiedź jest w zasadzie taka sama jak @Sardathrion, właśnie powiązałem z odpowiednimi zasadami :)
MattDavey
7

Jeśli opis klasy zawiera słowo „ i ”, należy go podzielić na dwie (lub więcej) klasy. Wygląda na to, że możesz uczynić tę funkcję członkiem innej klasy, do której odwołują się te, które aktualnie masz.

Sardathrion - przeciw nadużyciom SE
źródło