Princip acyklických závislostí - Acyclic dependencies principle
The princip acyklických závislostí (ADP) je princip softwarového designu definovaný Robertem C. Martinem, který uvádí, že „graf závislostí balíčků nebo komponent by neměl mít žádné cykly".[1] To znamená, že závislosti tvoří a směrovaný acyklický graf.
Příklad
V tomto UML schéma balení balíček A záleží na balíčcích B a C. Balík B zase záleží na balíčku D, což závisí na balíčku C, což zase závisí na balíčku B. Poslední tři závislosti vytvářejí cyklus, který je nutné přerušit, aby byl dodržen princip acyklických závislostí.[2]
Typy závislostí
Závislosti softwaru mohou být buď explicitní, nebo implicitní. Příklady explicitních závislostí zahrnují:
- Zahrňte prohlášení, jako je
#zahrnout
v C / C ++,použitím
v C # aimport
v Javě. - Závislosti uvedené v systému sestavení (např.
závislost
značky v Maven konfigurace).
Mezi příklady implicitních závislostí patří:[3]
- Spoléhání se na konkrétní chování, které není dobře definováno vystaveným rozhraním.
- Síťové protokoly.
- Směrování zpráv přes a softwarová sběrnice.
Obecně se považuje za dobrou praxi upřednostňovat explicitní závislosti, kdykoli je to možné. Je to proto, že explicitní závislosti se snadněji mapují a analyzují než implicitní závislosti.
Strategie lámání cyklů
Obecně je vždy možné přerušit řetězec cyklické závislosti. Dvě nejběžnější strategie jsou:[1]
- Princip inverze závislostí
- Vytvořte nový balíček a přesuňte tam běžné závislosti.
Viz také
Reference
- ^ A b „Granularity: Acyclic dependencies princip (ADP)“ (PDF). Mentor objektů. Citováno 2013-06-14.
- ^ Fowler, Martin (2004). UML destilovaný.
- ^ „Implicitní závislosti jsou také závislosti“. O'Reilly. Archivovány od originál dne 25. 05. 2013. Citováno 2013-06-16.