Принцип DIP: абстракции и композиция

Как гласит принцип DIP из SOLID:

Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

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

В одном из ответов с SO, писали, что это не совсем так.

Но никакого пояснения и примеров небыло.

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

И всегда ли нужно аргументы-зависимости указывать от интерфейса или абстрактного класса?

Если можно, с примера :)

И второй вопрос, связан с видом ассоциации - композицией, а именно: когда мы создаём объект внутри конструктора, но при этом не внедряем его - нарушает ли это принцип DIP? Т.к. у нас зависимость жёсткая. Также не зависит от абстракции.. и так же не понятно, как тестировать такой класс в котором есть композиция.. поясните пожалуйста, желательно с примерами.


Ответы (0 шт):