
Александр
26.09.2018
15:56:02
а хедлеры в тестах значит работают без DI и кормяться вручную

Aleksandr
26.09.2018
15:56:08

Roman
26.09.2018
15:56:45
уже есть какие-нибудь фреймворки кодогенераторы декларативных API тестов?

Александр
26.09.2018
15:59:00
ну я просто знаю как в PHP сделан DI, все классы которым требуются зависимости дергаются через оберточку аля DI("/namespace/className") дальше уже движок разбирает что там в конструкторе за зависимости и пытается их накормить (если есть)

Google

Roman
26.09.2018
15:59:03
есть идея как реализовать декларативные тесты GraphQL апишек, определяешь:
1. query
2. ожидаемый JSON
3. conditions (макро-функции, реализуются в Go коде)

Dmitry
26.09.2018
15:59:10
Коллеги, панику из горутины никак не отловить?

Александр
26.09.2018
15:59:32

Dmitry
26.09.2018
15:59:34
https://play.golang.org/p/N6NGMFH86g2

Александр
26.09.2018
16:00:16
в нем и отлавливайте

Dmitry
26.09.2018
16:00:40
Т е автоматически никак.

Александр
26.09.2018
16:01:08

Aleksandr
26.09.2018
16:01:32

Александр
26.09.2018
16:01:56
ну окей
в гоу то как принято с DI?

Aleksandr
26.09.2018
16:02:20
в го не принято di, сам знаешь

Dmitry
26.09.2018
16:02:57

Google

Александр
26.09.2018
16:03:03

Dmitry
26.09.2018
16:03:14
Ок, спасибо

Александр
26.09.2018
16:05:29
наоборот все говорили "ну зависимости надо статически отдавать и ок"
в смысле методов наделать аля GetDB()

Aleksandr
26.09.2018
16:06:11

Александр
26.09.2018
16:07:31
и где его простите применять?
если я не могу контейнер с ним скоримть в хедлер

Aleksandr
26.09.2018
16:07:49

Александр
26.09.2018
16:08:32
в данном случаи этот контейнер в структуре MyApplication

Aleksandr
26.09.2018
16:08:42
postStore := NewPostStore(container.GetDb())
userStore := NewUserStore(container.GetDb())

Александр
26.09.2018
16:08:56
и зачем это?
я с такми же успехом могу написать

Aleksandr
26.09.2018
16:09:06
а не
postStore := NewPostStore(container)
userStore := NewUserStore(container)

Александр
26.09.2018
16:09:30
db := db.NewConnect()
ostStore := NewPostStore(db)
userStore := NewUserStore(db)
почему тогда сразу не так?
только сущность наплодили "лишную"

Aleksandr
26.09.2018
16:10:03
и зачем это?
чтобы тестировать зависимости, а не зависимости зависимостей.
Зачем твой компонент будет зависеть от чужих зависимостей, если должен зависеть от своих?

Google

Александр
26.09.2018
16:10:29
нихрена

Aleksandr
26.09.2018
16:10:33
если он не создает новый коннект кажддый раз, то это норм

Александр
26.09.2018
16:10:43
создает

Aleksandr
26.09.2018
16:10:49
ну а зачем?

Александр
26.09.2018
16:10:56
мы же в main и это уже вызов идет бд непосрдественно

Aleksandr
26.09.2018
16:11:44
так что сказать то хочешь?

Александр
26.09.2018
16:11:44
я просто не вижу смысла тогда от "контейнера"
в твоей реализации
если мы из него дергаем обьект и передаем
какой смысл в контейнере?
сразу создаем на месте обьект и передаем уже
ну только инициализацию если спрятатать

Aleksandr
26.09.2018
16:13:31
погоди, если ты хочешь прямо в main все создать - создавай

Александр
26.09.2018
16:13:43
блин я просто упроситил модель
конечно же нет

Aleksandr
26.09.2018
16:13:45
я тебе не контейнер показываю, а какие зависимости передавать

Александр
26.09.2018
16:14:40
еще раз, если мы берем коннект бд из контейнера и передаем, зачем нам контейнер? Кроме помощи в инициализации бд
он откинулся до того как мы зашли в функцию

Roman
26.09.2018
16:15:06
https://github.com/jaypipes/ghw
FYI

Google

Admin
ERROR: S client not available

Aleksandr
26.09.2018
16:17:46

Александр
26.09.2018
16:18:18

Aleksandr
26.09.2018
16:20:05
ключевое слово - ресолвер.

Александр
26.09.2018
16:21:39
что есть "резолвер"?
type MyApplication struct {
db *db.Database
}
func (app *MyApplication) GetDB() *db.Database {
return app.db
}
резолвер?

Aleksandr
26.09.2018
16:23:19
нет, просто контейнер
ты ушел от первоначальной проблемы
инъекция контейнера vs инъекция зависимостей

Александр
26.09.2018
16:25:53
ну мы определили что я сделал не правильно
передал контейнер в хедлер

Денис
26.09.2018
16:27:30
Всем привет. А подскажите - в defer функции параметры расчитываются в момент появления defer в коде (а не в момент завершения функции). С коллером будет также?
Пример:
func (o *obj) foo() {
defer o.newTimer().stop()
//other_code
}
newTimer() - вызовется в самом начале функции, а stop() будет вызван в конце?

Илья
26.09.2018
16:29:44
да

Денис
26.09.2018
16:31:02
Спасибо

Александр
26.09.2018
16:31:50
ээм
а это к чему?

Aleksandr
26.09.2018
17:09:20

Александр
26.09.2018
17:10:15
к GraphQL
у меня тут еще дополнительный вопрос, а как насчет каскадных зависимостей? Когда приложение кормиться в вебсервер, а вебсервер передает дальше в хедлеры (и оборачивает их)

Google

Александр
26.09.2018
17:10:23
или же надо делать "все на 1 уровне"
теоретически я мог бы хедлеры просто иницилизировать на уровне вебсервера и просто ему их скормить

Aleksandr
26.09.2018
17:11:56
не совсем понял

Александр
26.09.2018
17:13:08
Вариант 1:
serv := http.NewWebServer(app)
serv.Lisner() // Внутри вызывается route который вызывает handlers
Вариант 2:
routes := handlers.NewRouters(app)
serv := http.NewWebServer(app)
serv.Lisner(routes)
стоит ли там "оборачивать"
или зависимости должны иди прозрачно без каскадов

Aleksandr
26.09.2018
17:14:16
ну ты главное компонент к контейнеру не привязывай, а так делай как хочешь

Александр
26.09.2018
17:14:31
в ООП это как бы норм, глубина бывает по 7 элементов

Aleksandr
26.09.2018
17:14:35
я вижу что ты в фабрику контейнер прокидываешь. это не про зависимости