Принцип DIP из SOLID
Правильно ли я понял принцип DIP из SOLID? Если класс A имеет зависимость от класса B, то при описании класса А зависимость нужно указать через абстракцию, т.е.:
interface BInterface { ... }
class B implements BInterface { ... }
class A {
public function __construct(BInterface $b) { ... }
}
Если бы мы указали в зависимости, конкретно класс, вот так:
class A {
public function __construct(B $b) { ... }
}
то это было бы нарушение принципа DIP ?
Ответы (1 шт):
Вы всё верно расписали, ваш второй пример нарушает принцип инверсии зависимостей, т.к. класс A полностью зависит от класса B, если вы измените в будущем класс B, то вам придётся отредактировать и другие классы. А в первом примере вы создали для класса B интерфейс BInterface и тем самым обеспечили независимость модулей разных уровней. Теперь класс A не привязан жёстко к конкретному классу, главное чтобы передаваемый объект в конструкторе реализовывал BInterface и, соответственно, принцип DIP не нарушается.