Когда использовать наследование в JavaScript

5

Когда использовать наследование

Почему наследование это отличный инструмент для решения проблем переиспользования кода?
Нужно быть очень осторожным при использовании наследования, потому что это может сделать Ваш код сложным и хрупким 😩.

Не нужно использовать наследование только ради использования 😄, особенно в маленьких проектах. Как говориться, нужно чтобы проекты были как можно более простыми! (Keep it simple!).

Начинайте с простых объектов, и если Вы видите, что некоторое число этих объектов имеет одинаковые фичи, значит, возможно, вы можете инкапсулировать эти объекты внутри общего объекта, и использовать наследование. Но помните, наследование не единственный способ, чтобы активировать переиспользование кода. Есть другая техника под названием КОМПОЗИЦИЯ, которую мы скоро рассмотрим.

Итак, давайте рассмотрим проблему с наследованием. Вот есть у нас объект Animal с двумя методами: eat и walk. И есть у нас два объекта, которые наследуются от AnimalPerson и Dog. Потом завтра, мы решим представить новый объект, под названием Goldfish, который наследуется от Animal. Наше иерархия поломалась. Почему?

wrong hierarchy

Потому что рыбы не могут ходить, они могут плавать. У нас есть неправильная иерархия. И это то, что происходит довольно таки часто, особенно среди неопытных разработчиков. Итак, чтобы решить эту проблему, нам нужно изменить иерархию.

В самом начале у нас должен стоять Animal объект с методом eat. Под ним у нас 2 объекта, mammal и fish. Mammal может ходить, а fish плавать. Затем у нас есть объекты Person и Dog, которые наследуются от Mammal и Goldfish, которая наследуется от Fish.

wrong hierarchy 1

Видите что происходит? В результате введения нового типа животного, которая Goldfish, нам пришлось изменить иерархию, и теперь эта иерархия более сложная, чем была раньше. Теперь, что будет если будет 10 различных типов животных? Эта иерархия будет всё сложнее и сложнее.
И мы будем ходить вперед-назад, чтобы определить правильное место для имплементирования метода.

Итак

Избегайте создавать иерархию наследования.

Потому что она очень хрупкая. Если Вы хотите использовать наследование, то придерживайте её на одном уровне (one level), не нужно углублять её нижу.
Есть одно знаменитое высказывание, которое гласит:

Favor Composition over Inheritance

Избегайте наследования в пользу композиции!

При композиции, вместо сложной иерархии, как мы только что видели, мы можем составить комплексную иерархию.

Мы можем составить несколько объектов вместе, чтобы создать новый объект. И эта техника даёт нам великолепную гибкость. Итак, вернёмся к нашему предыдущему примеру. Вместо того, чтобы использовать наследование, мы можем определить различные фичи для наших животных как независимые объекты. Итак, у нас есть три объекта, такие как canWalk, canEat и canSwin.

wrong hierarchy 1

Каждый из этих объектов — простой JavaScript объект с определенными свойствами и методами. Теперь мы хотим объект person.

Мы просто объеденим canWalk и canEat, чтобы создать нужный нам объект. Завтра мы захотим ввести Goldfish. Мы можем соеденить canEat и canSwim вместе, чтобы произвести нашу рыбу. Итак, у нас нету иерархии, и мы можем воспользоваться любой комбинацией из этих объектов, чтобы создать новые объекты. В JavaScript мы можем использовать Mixins, чтобы достигнуть композиции.

You might also like More from author

Leave A Reply

Your email address will not be published.