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?
object-oriented
class-design
Łagodny Fuzz
źródło
źródło
Odpowiedzi:
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 ...
źródło
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.
źródło