SD>>Более удобным подходом было бы уметь генерировать граф зависимостей путем непосредственного анализа исходного кода. НС>Для чего более удобным?
Для тестирования, рефакторинга, и просто понимания — что от чего зависит, и где что сломается, если поменять вот этот компонент.
SD>> Однако там есть свои грабли, например, как понимать такую зависимость: SD>> if (random(100) < 50) then add_dependency_on(AnotherComponent) НС>А как такая зависимость, по твоему, понимается в случае DI? Разница тут будет только в случае вызова метода Resolve, что тут все заклеймили позором как антипаттерн..
Да мало ли что где клеймят. Если у тебя есть только одна сущность — "name" — а для работы с реальным миром нужно этот "name" во что-то развернуть, то хошь как хошь, а "Resolve" придется реализовать. Вопрос только в том, когда Resolve будет работать. Если во время компиляции — все чудесно, можно обложить тестами, можно научить IDE ходить по ссылками.
А если в рантайме, да где-то в каком-нибудь "DI container", да еще и на другом языке программирования (а то и вовсе на другой машине, — привет, DNS и аналогичные механизмы) — проще повеситься.