Size: a a a

2017 December 26

SK

Sergey Kapralov in JUG NN
А вот никогда этого не понимал если честно
источник

SK

Sergey Kapralov in JUG NN
Если кошерной считать инжекцию исключительно через конструктор - в чем роль DI контейнеров? Что - так сложно инстанцировать объект через конструктор?
источник

RM

Roman Makhlin in JUG NN
важно что это делаешь не ты, а контейнер. аннотация над конструктором описывает контракт, просто поля класса - это просто поля класса(инкапсуляция же)
источник

SK

Sergey Kapralov in JUG NN
И почему же это важно делать именно через DI?
источник

SK

Sergey Kapralov in JUG NN
Инкапсуляция тут ни при чем - конструктор есть конструктор
источник

II

Iurii Iurchenko in JUG NN
Sergey Kapralov
Если кошерной считать инжекцию исключительно через конструктор - в чем роль DI контейнеров? Что - так сложно инстанцировать объект через конструктор?
Идея в том чтобы держать байндинг контракт (интерфейс) - имплементация отдельно от кода, делигировать делать это контейнеру на освновании отдельно созданного конфига.
источник

VK

Vlad K in JUG NN
а профит то в чем от этой идеи?
источник

SK

Sergey Kapralov in JUG NN
да
источник

VK

Vlad K in JUG NN
вот от DI профит ясен - создавать объекты. построить и зарезолвить граф зависимостей. лайфсайкл менеджить, хаки через рефлексию добавлять
источник

RM

Roman Makhlin in JUG NN
профитов никаких - сплошной формализм)
источник

SK

Sergey Kapralov in JUG NN
Vlad K
вот от DI профит ясен - создавать объекты. построить и зарезолвить граф зависимостей. лайфсайкл менеджить, хаки через рефлексию добавлять
Вот как раз таки не ясно. Граф зависимостей при нормальной инкапсуляции легко проследить и без DI. Хаки через рефлексию - это зло, их по возможности следует избегать а не стремиться к ним. Лайфсайкл (скоупы?) - это скрытый coupling который только сковывает руки и является источником косяков.
источник

II

Iurii Iurchenko in JUG NN
для юнит тестов удобно использовать например (если код нормально написан) - подсунуть тестовый конфиг можно. опять же готовые точки расширения/кастомизации из коробки если речь не о написаном раз и навсегда приложении
источник

SK

Sergey Kapralov in JUG NN
Iurii Iurchenko
для юнит тестов удобно использовать например (если код нормально написан) - подсунуть тестовый конфиг можно. опять же готовые точки расширения/кастомизации из коробки если речь не о написаном раз и навсегда приложении
Подсунуть моки для тестов легко можно и через конструктор. Даже проще чем через DI.
источник

VK

Vlad K in JUG NN
граф зависимостей руками менеджить - это не нулевая таки затрата
источник

VK

Vlad K in JUG NN
создаешь объект - руками просунуть зависимости, откуда-то их взять. возможно создать - это ж делать надо и тестировать
источник

SK

Sergey Kapralov in JUG NN
Vlad K
создаешь объект - руками просунуть зависимости, откуда-то их взять. возможно создать - это ж делать надо и тестировать
Опять же - создать объект через конструктор - офигеть как сложно и лениво. Нет - мы лучше заведем спринговый контекст, понараспишем там бины в XMLе...
источник

VK

Vlad K in JUG NN
Сложно в конструктор аргументы передавать)
источник

SK

Sergey Kapralov in JUG NN
Ага - проще их в дескрипторе прописывать)
источник

RM

Roman Makhlin in JUG NN
но по факту профит один - у тебя строго задокументированно, что необходимо объекту, что бы жить. Поля об этом совершенно не говорят, потому что то, как инициализируется поле - одному богу известно, а как используется - не знает никто(не должен знать)
программиорвание контрактами сильно облегчает жизнь, помогает абстрагироваться от предметной области и легко повелевать существующей конфигурации(либо все работает и запускается - либо нет, ничего не разваливается в рантайме, потому что либо все зависимости зарезолвились, либо все упало)

легко писать тесты и тестовые конфиги и вообще жизнь становитсья краше
источник

VK

Vlad K in JUG NN
Их никто сейчас отдельно в дескрипторах не прописывает
источник