Принцип ациклических зависимостей - Acyclic dependencies principle

В принцип ациклических зависимостей (ADP) является принципом разработки программного обеспечения, определенным Робертом Мартином, который утверждает, что "граф зависимостей пакетов или компонентов не должен иметь циклов".[1] Это означает, что зависимости образуют ориентированный ациклический граф.

Пример

Пример круговой зависимости

В этом UML диаграмма пакета, упаковка А зависит от пакетов B и C. Упаковка B в свою очередь зависит от пакета D, который зависит от пакета C, что, в свою очередь, зависит от пакета B. Последние три зависимости создают цикл, который необходимо разорвать, чтобы соблюсти принцип ациклических зависимостей.[2]

Типы зависимостей

Программные зависимости могут быть явными или неявными. Примеры явных зависимостей включают:

  • Включите такие утверждения, как #включают в C / C ++, с помощью в C # и импорт в Java.
  • Зависимости, указанные в системе сборки (например, зависимость теги в Maven конфигурация).

Примеры неявных зависимостей включают:[3]

В общем, считается хорошей практикой по возможности предпочитать явные зависимости. Это связано с тем, что явные зависимости легче отображать и анализировать, чем неявные зависимости.

Стратегии прерывания цикла

В общем, всегда можно разорвать цепочку циклических зависимостей. Две наиболее распространенные стратегии:[1]

Смотрите также

Рекомендации

  1. ^ а б «Гранулярность: принцип ациклических зависимостей (ADP)» (PDF). Наставник по объекту. Получено 2013-06-14.
  2. ^ Фаулер, Мартин (2004). UML дистиллированный.
  3. ^ «Неявные зависимости также являются зависимостями». О'Рейли. Архивировано из оригинал на 2013-05-25. Получено 2013-06-16.