Size: a a a

2021 May 10

AK

Andrey Kartashov in Go-go!
Может, лучше явно задачу описать?
источник

S

Shade in Go-go!
Это понятно. У меня вопрос скорее был об реализации. DI в виде интерфейса куда проще мокается чем неведомая хрень с рефлексией под капотом
источник

АЛ

Артем Лазаренко... in Go-go!
Интерфейс же не во всех случаях подходит
источник

S

Shade in Go-go!
Читал её. И даже вот эту https://golangforall.com/ru/post/dependency-injection.html
источник

S

Shade in Go-go!
А в каких не подходит? Мне кажется если не подходит интерфейс - то это ошибка скорее архитектуры
источник

AK

Anton Kucherov in Go-go!
IMHO Constructor Injection и Parameter Injection (руками со сборкой в main) покрывают большинство юзкейсов. Контейнеры в целом не особо нужны, да они упрощают жизнь, но только на здоровенных монолитах, коих в Golang в общем то нет.
источник

S

Shade in Go-go!
Ну в эту парадигму и сервис локатор укладывается. Один из вопросов как раз и был: почему он антипаттерн, а какая-то хрень с рефлексией - это типа гуд.
источник

АЛ

Артем Лазаренко... in Go-go!
А как di связан с рефлексией?
источник

АЛ

Артем Лазаренко... in Go-go!
Ты видимо про какую-то конкретную реализацию di контейнера пишешь?
источник

АЛ

Артем Лазаренко... in Go-go!
Интерфейс эт что, это некая абстракция над разными по своей сути классами, что б объединить в что-то общее, но зачем это в юнит тестировании? Получается ты создаёшь абстракцию ради абстракции, а это еще один антипаттерн soft code 😁
источник

AK

Anton Kucherov in Go-go!
Если ваши товарищи пишут что какая то одна реализация DI контейнера лучше другой, они скорее всего не достаточно глубоко разобрались в вопросе.
источник

АЛ

Артем Лазаренко... in Go-go!
Где-то интерфейс подойдёт, но я б не назвал это уникальным способом
источник

S

Shade in Go-go!
Как раз таки интерфейс изи мокается и в юнит-тестах go это как по мне самый паттерн
источник

S

Shade in Go-go!
Я пришёл к такому же выводу. Спасибо
источник

AK

Anton Kucherov in Go-go!
Дабы с ними не сраться, я бы предложил сесть командой, сделать табличку с разными реализациями и выписать все плюсы/минусы каждой.
И потом уже обсудить результаты того что получится.
источник

S

Shade in Go-go!
Уже в конфлюенсе все выписал. Осталось похоливарить 😂
источник

AK

Aleksey Kislitsa in Go-go!
Имхо разница что одно уменьшает число сущностей, а второе наоборот
источник

S

Shade in Go-go!
За счет чего уменьшается число сущностей? Я не вижу принципиальной разницы.

У меня интерфейс может соответствовать сразу и фабрике и хранилищем конфигов, логгеров и синглтонов... Более того инициализированные синглтоны не будут болтаться в глобальной области, что для GC гуд. И все это добро я могу замокать и сделать тестирование изи...

Скорее всего у меня непонимание православного DI и IoC которое все ж таки тащат за уши из других языков...

Из ключевого и обще-приемлемого я вынес,  что в некоторой единой точке сборки должны быть собраны все провайдеры всех используемых сущностей, и раздаваться должны инжекторами, последовательно собирающих провайдерами некоторые выходные  сущности...

Ок. Интерфейс с реализацией в отдельном пакете(-ах),  некий метод конструктора реализации плюс фабричные методы...
источник

AK

Aleksey Kislitsa in Go-go!
За счёт того, что ты не создаёшь объект в каждом месте использования, а создаёшь только в одном

Плюс моки точно так же тянутся за уши, но никого это не смущает
источник

S

Shade in Go-go!
Я и не создаю в каждом месте,  я либо юзаю метод из единого пакета,  если все таки неймется запихнуть синглтон в глобальные переменные,  либо предаю параметром,  либо катаю через контекст -  у меня руки не связаны...

Моки это не паттерн,  как их можно притягивать или не притягивать за уши, если это атрибут парадигмы юнит-тестирования?
источник