Size: a a a

Software Design/Architecture/Zen

2021 May 10

AZ

Artem Zakirullin in Software Design/Architecture/Zen
DIG от убера
источник

R

Roman in Software Design/Architecture/Zen
Там 80% статьи — именно DI как принцип. И только где-то внизу показано, как это затащить в контейнер
источник

R

Roman in Software Design/Architecture/Zen
Твоя цитата  "Но статья неоч, как и в целом идея втаскивать DI в Go"
источник

SZ

Sergey Zolotov in Software Design/Architecture/Zen
val a = A(env(URI))
val b = B(a)
val c = C(b)

c.run()


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

AZ

Artem Zakirullin in Software Design/Architecture/Zen
I recently built a small project in Go. I’ve been working with Java for the past few years and was immediately struck by the lack of momentum behind Dependency Injection (DI) in the Go ecosystem. I decided to try building my project using Uber’s dig library and was very impressed.

I found that DI helped solve a lot of problems I had encountered in my previous Go applications – overuse of the init function, abuse of globals and complicated application setup.
источник

AZ

Artem Zakirullin in Software Design/Architecture/Zen
Его же не принцип DI спас, очевидно, а его реализация - контейнер/туллинг
источник

k

knopkod4v in Software Design/Architecture/Zen
в го же есть import ?
Типа попросил зависимость средствами языка и всё ок
источник

R

Roman in Software Design/Architecture/Zen
Ну да, тут написано "я написал на DI с помощью ..., это решило кучу проблем: init функции, глобальные переменные и т.п."
источник

R

Roman in Software Design/Architecture/Zen
В общем, спор бесполезен. Мы друг друга поняли
источник

AZ

Artem Zakirullin in Software Design/Architecture/Zen
Хуево 🙂 Чего только стоит протаскивание одного логгера через все дерево зависимостей
источник

SZ

Sergey Zolotov in Software Design/Architecture/Zen
ну вот. я ж о чем. когда у тебя десяток классов это ок. на сотне уже сложнее, а дальше просто жопа
источник

AZ

Artem Zakirullin in Software Design/Architecture/Zen
> associated anti-pattern of components building their own dependencies during initialization

Создание некоторых компоентов (очевидно что-то не из инфры, не база/логгер/etc) можно отдать на откуп модулю.
Пусть себе там инстанцирует, до тех пор пока всеэто изолированно. С некоторой точки зрения это даже создает меньшую связанность с внешними модулями, т.к. у тебя наружу торчит тонкий интерфей.
источник

AZ

Artem Zakirullin in Software Design/Architecture/Zen
Все так, да
источник

AK

Aleh Kashnikau in Software Design/Architecture/Zen
import { pool } from “@app/db”
источник

R

Roman in Software Design/Architecture/Zen
Это проблема, которую как раз DI решает)
источник

AK

Aleh Kashnikau in Software Design/Architecture/Zen
не го, но по аналогии
источник

AK

Aleh Kashnikau in Software Design/Architecture/Zen
в чем проблема? Обычный сервис локатор
источник

k

knopkod4v in Software Design/Architecture/Zen
а в чём тут проблема?
источник

AZ

Artem Zakirullin in Software Design/Architecture/Zen
Типо, тянет модуль какую-то либу - руки тянутся интерфейсом закрыть ее, и принимать снаружи модуля как зависимость, теряя при этом изоляцию и пространство для дальнейших изолированных изменений внтури модуля. Не нужно так делать, в большинстве случаев.

Разве что клиент хочет как-то альтерить поведение через композицию - тут другое дело.
источник

SZ

Sergey Zolotov in Software Design/Architecture/Zen
в ноде это можно подменить в рантайме для тестов. в гошке так не выйдет

ну и да, это обычный локатор
источник