У мене є якийсь код, де хороша модель успадкування пішла вниз, і я намагаюся зрозуміти, чому і як це виправити. В основному, уявіть, що у вас є ієрархія зоопарку:
class Animal
class Parrot : Animal
class Elephant : Animal
class Cow : Animal
тощо.
У вас є ваші методи харчування (), run () тощо, і все добре. Потім одного дня хтось підійде і каже - наш клас CageBuilder чудово працює і використовує animal.weight () і animal.height (), за винятком нового африканського зубра, який занадто сильний і може розбити стіну, тому я хочу додати ще одна властивість класу Animal - цеAfricanBizon (), і використовуйте його, вибираючи матеріал і переосмислюйте його лише для класу AfricanBizon. Наступна людина приходить і робить щось подібне, і наступне, що ви знаєте, у вас є всі ці властивості, характерні для деякого підмножини ієрархії в базовий клас.
Який хороший спосіб поліпшити / рефактор такого коду? Однією з альтернатив тут може бути просто використання динамічних передач, щоб перевірити типи, але це захаращує абонентів і додає купу if-then-else всюди. Тут ви можете мати більш конкретні інтерфейси, але якщо все, що вам потрібно, - це базовий клас, який теж не допомагає. Будь-які інші пропозиції? Приклади?
Дякую!