Принцип ациклических зависимостей
Принцип ациклических зависимостей ( ADP ) — это принцип проектирования программного обеспечения, определенный Робертом К. Мартином, который гласит, что « граф зависимостей пакетов или компонентов не должен иметь циклов ». [1] Это означает, что зависимости образуют ориентированный ациклический граф .
Пример
[ редактировать ]На этой диаграмме пакетов пакет A зависит от пакетов B и C. UML Пакет B, в свою очередь, зависит от пакета D , который зависит от пакета C зависит от пакета B. , который, в свою очередь , Последние три зависимости создают цикл, который необходимо разорвать, чтобы придерживаться принципа ациклических зависимостей. [2]
Типы зависимостей
[ редактировать ]Программные зависимости могут быть явными или неявными.Примеры явных зависимостей включают в себя:
- Включите такие утверждения, как
#include
на Си/С++,using
на C# иimport
на Яве. - Зависимости, указанные в системе сборки (например,
dependency
теги в конфигурации Maven ).
Примеры неявных зависимостей включают в себя: [3]
- Опираясь на конкретное поведение, которое не четко определено предоставляемым интерфейсом.
- Сетевые протоколы .
- Маршрутизация сообщений по программной шине .
В общем, считается хорошей практикой отдавать предпочтение явным зависимостям, когда это возможно. Это связано с тем, что явные зависимости легче отображать и анализировать, чем неявные.
Стратегии разрыва цикла
[ редактировать ]В общем, всегда можно разорвать циклическую цепочку зависимостей. Две наиболее распространенные стратегии: [1]
- Принцип инверсии зависимостей
- Создайте новый пакет и переместите туда общие зависимости.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Перейти обратно: а б «Детализация: принцип ациклических зависимостей (ADP)» (PDF) . Объект Наставник. Архивировано из оригинала 30 ноября 2015 г. Проверено 15 ноября 2022 г.
{{cite web}}
: CS1 maint: bot: исходный статус URL неизвестен ( ссылка ) - ^ Фаулер, Мартин (2004). UML Дистиллированный .
- ^ «Неявные зависимости также являются зависимостями» . О'Рейли. Архивировано из оригинала 25 мая 2013 г. Проверено 16 июня 2013 г.