SOLID - Принцип разделения интерфейса

Принципы проектирования классов SOLID в PHP

Принцип разделения интерфейса (Interface Segregation Principle, ISP).

Четвертый SOLID принцип из пяти.
Формулировка:

Клиенты не должны зависить от методов, которые они не используют.

или

Много специализированных интерфейсов лучше, чем один универсальный.

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

Пример.

ITransformer.php

interface ISuperTransformer
{
    public function toCar();
    public function toPlane();
    public function toShip();
}

transformers.php

class SuperTransformer implements ISuperTransformer {
    public function toCar(){
        echo 'transform to car';
    }
    
    public function toPlane(){
        echo 'transform to plane';
    }
    
    public function toShip(){
        echo 'transform to ship';
    }
}

class CarTransformer implements ISuperTransformer {
    public function toCar(){
        echo 'transform to car';
    }
    
    public function toPlane(){
        throw new Exception('i can`t transform to plane');
    }
    
    public function toShip(){
        throw new Exception('i can`t transform to ship');
    }
}

Разбиваем на несколько интерфейсов.

ITransformer.php

interface ICarTransformer {
    public function toCar();
}

interface IPlaneTransformer {
    public function toPlane();
}

interface IShipTransformer {
    public function toShip();
}

transformers.php

class SuperTransformer implements ICarTransformer, IPlaneTransformer, IShipTransformer {
//...
}

class CarTransformer implements ICarTransformer {
    public function toCar(){
        echo 'transform to car';
    }
}

Добавить отзыв (пожелание, комментарий)