Mam kod, w którym spadł dobry model dziedziczenia i próbuję zrozumieć, dlaczego i jak to naprawić. Zasadniczo wyobraź sobie, że masz hierarchię zoo z:
class Animal
class Parrot : Animal
class Elephant : Animal
class Cow : Animal
itp.
Masz swoje metody eat (), run () itp. I wszystko jest w porządku. Pewnego dnia ktoś przychodzi i mówi - nasza klasa CageBuilder działa świetnie i korzysta z animal.weight () i animal.height (), z wyjątkiem nowego afrykańskiego żubra, który jest zbyt silny i może rozbić ścianę, więc dodam jeszcze jedna właściwość klasy Animal - isAfricanBizon () i używaj jej przy wyborze materiału i zastępuj go tylko dla klasy AfricanBizon. Następna osoba przychodzi i robi coś podobnego, a następnie wiesz, że masz wszystkie te właściwości specyficzne dla pewnego podzbioru hierarchii w klasie bazowej.
Jaki jest dobry sposób na ulepszenie / refaktoryzację takiego kodu? Jedną z możliwości jest tutaj użycie dynamicznych podcastów, aby sprawdzić typy, ale to zaśmieca osoby dzwoniące i dodaje mnóstwo „jeśli-to-jeszcze” w każdym miejscu. Możesz mieć bardziej szczegółowe interfejsy tutaj, ale jeśli wszystko, co masz, to odwołanie do klasy podstawowej, które też niewiele pomaga. Jakieś inne sugestie? Przykłady?
Dzięki!