Size: a a a

2020 October 23

LL

Lama Lover in pro.elixir
Alex Bubnov
"лучше" в данном случае было бы повесить алиас на результат вызова compile_env, но это так не работает
А что мешает использовать аттрибут?
источник

AB

Alex Bubnov in pro.elixir
мне его в каждом модуле вешать, чтоли?
источник

AB

Alex Bubnov in pro.elixir
ок, может быть его можно вывесить из using, как и алиас.
источник

AB

Alex Bubnov in pro.elixir
но атрибуты это все равно, кхм, неизящно и не факт, что масштабируется
источник

LL

Lama Lover in pro.elixir
Alex Bubnov
но атрибуты это все равно, кхм, неизящно и не факт, что масштабируется
А как это должно масштабироваться? И какую задачу ты вообще решаешь?
источник

AB

Alex Bubnov in pro.elixir
Lama Lover
А как это должно масштабироваться? И какую задачу ты вообще решаешь?
DI по сути. предоставление провайдеров чего-либо в  отчуждаемое приложение.
источник

AB

Alex Bubnov in pro.elixir
Alex Bubnov
вот кстати, как бы вы делали реюзабельный контекст, работающий с внешними системами?
типа, есть какой-то довольно абстрактный кусок кода, работающий с базой - у него там внутри сколько-то табличек, на них есть вполне независимый комплект миграций, он предоставляет какой-то там интерфейс.

сейчас в нем явно прописан используемый экземпляр Ecto.Repo. можно repo вынести в параметр каждой функции в контексте, но это определенно не масштабируется - если ему потребуется очередь, станет 2 параметра.
можно вынести в отдельный параметр не просто repo, а целую пачку сервисов окружения, но тем не менее, это параметр, который нужно везде таскать.

в кложе это решается подвешенными замыканиями, или reified протоколами, или еще как-нибудь, короче провязывается на фазе инициализации(см. integrant/component). в beam для этого ничего готового нет, а clojure way сделать малореалистично из-за "модулеориентированности" всего инфраструктурного кода.
@LamaLove вот это вчерашнее
источник

LL

Lama Lover in pro.elixir
Alex Bubnov
DI по сути. предоставление провайдеров чего-либо в  отчуждаемое приложение.
dependency injection обычно делают через аттрибуты
источник

AB

Alex Bubnov in pro.elixir
Lama Lover
dependency injection обычно делают через аттрибуты
атрибуты не эквивалентны алиасам, например. они выглядят по-другому.
источник

LL

Lama Lover in pro.elixir
Alex Bubnov
@LamaLove вот это вчерашнее
А вот для зависимости, которая использует репо проекта, который её использует, я бы сначала ответил на два вопроса
1) Зачем использовать Repo? Типа Repo это же просто набор функций, исполняющих запросы. Разве не достаточно предоставить только запросы?
2) А почему бы не предоставлять свой Repo, чтобы проект-хост использовал его? Я с таким подходом прямо сейчас работаю и в нём ничего страшного нет ...
источник

LL

Lama Lover in pro.elixir
Я вообще не люблю всякие нечистые зависимости, которые за моей спиной лезут в базу и всё вот это вот
источник

AB

Alex Bubnov in pro.elixir
2 - точно нет. зачем мне две конфигурации Repo, если можно обойтись хостовой?
источник

AB

Alex Bubnov in pro.elixir
опять же, если репо два, нужно задумываться, что у тебя висит х2 коннектов.
сейчас мне пофиг, у меня pgbouncer, но завтра его может не быть. или он есть в проде, но нет на тестовом окружении.
источник

AB

Alex Bubnov in pro.elixir
Lama Lover
А вот для зависимости, которая использует репо проекта, который её использует, я бы сначала ответил на два вопроса
1) Зачем использовать Repo? Типа Repo это же просто набор функций, исполняющих запросы. Разве не достаточно предоставить только запросы?
2) А почему бы не предоставлять свой Repo, чтобы проект-хост использовал его? Я с таким подходом прямо сейчас работаю и в нём ничего страшного нет ...
1 - вот это зависит. да, можно наружу отдать Multi, но в такой ситуации нет возможности оттранслировать ошибки.
источник

AB

Alex Bubnov in pro.elixir
с defdelegate другая проблема - optional_callbacks. должны ли они делегироваться?..
по-хорошему - только тогда, когда они есть в таргет-модуле, но таргет-модуль в хосте, и в общем случае на момент компиляции зависимости не скомпилирован.
источник

AB

Alex Bubnov in pro.elixir
оч плохо.
источник

AB

Alex Bubnov in pro.elixir
да, похоже, алиас из using работает лучше всего.
источник

AB

Alex Bubnov in pro.elixir
правда, это всё работает только для стейтлесс-зависимостей или зависимостей, где весь стейт известен в компайл-тайме.
источник

AB

Alex Bubnov in pro.elixir
Alex Bubnov
правда, это всё работает только для стейтлесс-зависимостей или зависимостей, где весь стейт известен в компайл-тайме.
наверное, можно даже сказать "работает только для синглтонов"
источник

LL

Lama Lover in pro.elixir
Alex Bubnov
2 - точно нет. зачем мне две конфигурации Repo, если можно обойтись хостовой?
Я о другом
Зачем использовать хостовую, когда хост может использовать репо из зависимости
источник