Принцип разделения интерфейса — четвертый принцип SOLID для написания чистого кода. Если вы хотите прочитать с самого начала, начните здесь.

На языке учебника принцип разделения интерфейса гласит, что ваш клиент никогда не должен реализовывать интерфейс, который он не использует. На простом английском это означает, что ваши методы/классы не должны зависеть от чего-то, что они на самом деле не используют.

Итак, давайте начнем с примера: -

На приведенной выше диаграмме классы EngineeringManager и SoftwareEngineer унаследовали функции от класса Employee. Но если внимательно присмотреться, EngineeringManager не реализует функции codeFeature(). Точно так же SofwareEngineer не реализует функциональность manageTeam(). Приведенный выше пример является явным нарушением принципа разделения интерфейса. Ниже приведен фрагмент кода для демонстрации приведенного выше примера:

class Employee {
  manageTeam() {
    console.log("I am managing the team!!!");
  }

  codeFeature() {
    console.log("I am coding a feature!!!");
  }
}

class EngineeringManager extends Employee {
  codeFeature() {
    return new Error("I cannot code feature!!!");
  }
}

class SofwareEngineer extends Employee {
  manageTeam() {
    return new Error("I cannot manage team!!!");
  }
}

Так как же решить вышеуказанную проблему? Мы исправим это, отделив базовую реализацию, как показано ниже:

Теперь класс ManagerEmployee имеет только функции manageTeam(), которые требуются классу EngineeringManager. Точно так же мы видим класс EngineeringEmployee. Ниже приведен фрагмент кода для демонстрации приведенного выше примера:

class ManagerEmployee {
  manageTeam() {
    console.log("I am managing the team!!!");
  }
}

class EngineeringEmployee {
  codeFeature() {
    console.log("I am coding a feature!!!");
  }
}

class EngineeringManager extends ManagerEmployee {
}

class SofwareEngineer extends EngineeringEmployee {
}

Надеюсь, вы получили некоторое представление о принципе разделения интерфейса. Если у вас есть какие-либо предложения, не стесняйтесь добавлять их в комментариях ниже. Пожалуйста, хлопайте, если вам понравился материал. Вы можете прочитать больше моих блогов на моем сайте https://blog.csschool.io/