Принцип ациклических зависимостей - Acyclic dependencies principle
В принцип ациклических зависимостей (ADP) является принципом разработки программного обеспечения, определенным Робертом Мартином, который утверждает, что "граф зависимостей пакетов или компонентов не должен иметь циклов".[1] Это означает, что зависимости образуют ориентированный ациклический граф.
Пример
В этом UML диаграмма пакета, упаковка А зависит от пакетов B и C. Упаковка B в свою очередь зависит от пакета D, который зависит от пакета C, что, в свою очередь, зависит от пакета B. Последние три зависимости создают цикл, который необходимо разорвать, чтобы соблюсти принцип ациклических зависимостей.[2]
Типы зависимостей
Программные зависимости могут быть явными или неявными. Примеры явных зависимостей включают:
- Включите такие утверждения, как
#включают
в C / C ++,с помощью
в C # иимпорт
в Java. - Зависимости, указанные в системе сборки (например,
зависимость
теги в Maven конфигурация).
Примеры неявных зависимостей включают:[3]
- Опираясь на конкретное поведение, которое не четко определяется предоставляемым интерфейсом.
- Сетевые протоколы.
- Маршрутизация сообщений по программная шина.
В общем, считается хорошей практикой по возможности предпочитать явные зависимости. Это связано с тем, что явные зависимости легче отображать и анализировать, чем неявные зависимости.
Стратегии прерывания цикла
В общем, всегда можно разорвать цепочку циклических зависимостей. Две наиболее распространенные стратегии:[1]
- Принцип инверсии зависимостей
- Создайте новый пакет и переместите туда общие зависимости.
Смотрите также
Рекомендации
- ^ а б «Гранулярность: принцип ациклических зависимостей (ADP)» (PDF). Наставник по объекту. Получено 2013-06-14.
- ^ Фаулер, Мартин (2004). UML дистиллированный.
- ^ «Неявные зависимости также являются зависимостями». О'Рейли. Архивировано из оригинал на 2013-05-25. Получено 2013-06-16.