Analýza nástrojů na odhalení cyklických závislostí
Jako vývojář chci mít spolehlivý nástroj pro odhalení cyklických závislostí, protože pak v kódu dosti náhodně způsobují obtížně identifikovatelné problémy
Nástroj bude prozatím vyzkoušen na pid modulu, kde bývaly s cyklickými závislostmi problémy nejčastěji.
Akceptační kritéria
-
Jsou porovnány populární nástroje na detekci cyklických závislostí -
U nástroje Dependency cruiser je navíc odzkoušena funkcionalita pro code boundary management pro zabránění importů v IE části modulu z IG/OG částí modulu (a analogicky pro IG z IE/OG a OG z IE/IG; případně třeba i pro src z test) -
Některý z porovnávaných nástrojů je doporučen pro další použití - Ideální nástroj by si měl poradit s TypeScript kódem, nedávat false positives u dependency injections a být použitelný v kontinuální integraci pro prevenci nových cyklických závislostí v repozitáři
-
Je připraven další postup (založeny issues pro odstranění stávajících cyklických závislostí, případně pro úpravu kontinuální integrace) -
Výstup bude prezentován na Node.js chapteru
Implementační poznámky
- Vzešlo z Node.js chapteru https://golemiocz.slack.com/archives/C03H9T45QTA/p1726650090216199 a https://golemiocz.slack.com/archives/C03H9T45QTA/p1754393992896299
- Jako dva nejpopulárnější kandidáti vypadají dpdm a madge
-
Při rychlém pokusu madge narozdíl od dpdm ignoroval DI
-
Autoři dpdm ale vzhledem k madge píšou:
Stable output: This is compared to madge, whose results are completely inconclusive when analyze TypeScript.
(otázka je, co přesně to znamená, jestli je to vůbec pravda, případně nakolik je to aktuální)
-
- Velice populární je také Dependency cruiser, u kterého je však detekce cyklických závislostí jen jedna z funkcí (navíc ji neuvádějí mezi hlavními) - tato funkcionalita u něj tedy může být méně vyladěná a mít méně možností, ale zase nabízí zajímavé funkce navíc jako code boundary management nebo vizualizace závislostí
- Viz také diskuse o TS code boundary management v tomto SO vlákně
- Konzultace @davidstraka @danknotek
- Akceptuje @benaktom
Edited by David Straka