Введение

Методология объектно-ориентированного проектирования программного обеспечения

В объектно-ориентированном проектировании принцип инверсии зависимостей – это конкретная методология для создания слабосвязанных программных модулей. При следовании этому принципу, традиционные зависимости, устанавливаемые от модулей высокого уровня, определяющих политику, к модулям низкого уровня, от которых зависят другие модули, меняются местами, что делает модули высокого уровня независимыми от деталей реализации модулей низкого уровня. Принцип утверждает:

Предписывая, чтобы объекты как высокого, так и низкого уровня должны зависеть от одной и той же абстракции, этот принцип проектирования меняет представление о объектно-ориентированном программировании, которое есть у некоторых разработчиков. Идея, лежащая в основе пунктов А и В этого принципа, заключается в том, что при проектировании взаимодействия между модулем высокого и низкого уровня, это взаимодействие следует рассматривать как абстрактное. Это оказывает влияние не только на проектирование модуля высокого уровня, но и на модуль низкого уровня: последний должен быть спроектирован с учетом этого взаимодействия, и может потребоваться изменить его интерфейс. Во многих случаях, рассмотрение самого взаимодействия как абстрактного понятия позволяет уменьшить связанность компонентов без использования дополнительных шаблонов кодирования, обеспечивая более простую и менее зависимую от реализации схему взаимодействия. Когда обнаруженная абстрактная схема взаимодействия между двумя модулями является универсальной и обобщение оправдано, этот принцип проектирования также приводит к следующему шаблону кодирования инверсии зависимостей.

Традиционный слойный рисунок

В традиционной архитектуре приложений компоненты нижнего уровня (например, уровень утилит) разрабатываются для использования компонентами верхнего уровня (например, уровень политик), что позволяет создавать все более сложные системы. В такой структуре компоненты верхнего уровня напрямую зависят от компонентов нижнего уровня для выполнения определенных задач. Эта зависимость от компонентов нижнего уровня ограничивает возможности повторного использования компонентов верхнего уровня. Для решения этой проблемы используются внедрение зависимостей, которое облегчает предоставление выбранной реализации компонента нижнего уровня компоненту верхнего уровня во время выполнения.

История

Принцип инверсии зависимостей был сформулирован Робертом К. Мартином и описан в ряде публикаций, включая статью «Объектно-ориентированные метрики качества проектирования: анализ зависимостей», статью «Принцип инверсии зависимостей», опубликованную в журнале C++ Report в июне 1996 года, а также книги «Гибкая разработка программного обеспечения: принципы, шаблоны и практики» и «Гибкие принципы, шаблоны и практики в C#».