Здравствуйте, IQuerist, Вы писали:
IQ>>>Вам не в комментах стоит холиварить, а свой собственный пост запилить об абсолютной святости DI,
IQ>·>Об абсолютной святости ты сам досочинил. Я утверждаю лишь что уж пусть будет гкод с DI, чем гкод без DI.
IQ> Для обоснования своей позиции я написал целый пост. Для обоснования своей вы не написали и одной полной строки. Несимметрично.
Я уже написал достаточно в этой ветке. Ты правда считаешь, что имеет смысл накопипастить новый пост?
IQ>В последнее время, мне как раз попадались реализации big ball of mud исключительно с DI
Так повезло, видимо, найди нормальную работу. Но с чего ты взял что BBoM с global variable или с service locator будет хоть чем-то лучше?
IQ>global variable и service locator и что в них плохого на ранних этапах развития проекта?
Тем что это типичный technical debt. Если, конечно, не писать проекты-однодневки (а с ними всё просто — пиши как хочешь, всё пофиг), то потом от них придётся избавляться, что всегда довольно болезненно: рефакторить DI проще, чем GV или SL.
Кстати, SL и реализовывать сложнее чем DI.
Кстати, вот это:
Лично для меня DI изначально был всего лишь удобным механизмом построения "плагинной архитектуры".
тоже не понимание предмета. Вот как раз SL лучше подходит для плагинной архитектуры, особенно когда связывание происходит runtime.
А как ты реализуешь плагины с DI?
Далее:
Модули верхних уровней не должны зависеть от модулей нижних уровней
только именно так и получится сделать если использовать только DI с Constructor Injection. Ибо ты просто не сможешь создать объекты если уровни смешиваются. DAG, однако. В случае с GV и SL — легко получается месиво зависимостей всего от всего, которое потом фиг распутаешь.
IQ>Вы забыли оператор new забанить, он же главный источник неуправляемых связей.
Что значит забанить? В DI он не банится, а переносится наружу, в wiring-код.
IQ>>>и приложенными enterprise проектами
IQ>·>Ага, ты значит запилил пост с какой-то лажей из пяти строк, а с меня enterprise проекты требуешь.
IQ>Ну вы то пока даже с "лажей" поста не запилили, одно нытье и литании.
Да о чём тут пилить-то? Прочитай ту ссылку на вики с DI Examples, там всё вроде понятно.
Если нужен код, возьми свой и выкини интерфейсы:
public class HomeController : Controller
public HomeController(
BoringItemDataReader,
BoringItemDataWriter,
BoringItemChildDataReader,
BoringItemChildDataWriter,
AppDataJsonConverter,
...
)