Size: a a a

2020 October 22

AD

Anastasiya Dyachenko in pro.elixir
или в конфиге
источник

AB

Alex Bubnov in pro.elixir
Anastasiya Dyachenko
или в конфиге
да, конфиг это в принципе самый простой вариант.
источник

AB

Alex Bubnov in pro.elixir
отдельный интересный вопрос, кстати, миграции. в экто они намертво прибиты к repo(точнее, приложению, но именно через repo).
источник

AB

Alex Bubnov in pro.elixir
вообще, я так смотрю на это всё, и кажется мне, что с появления эликсира не решили по большому счету ни одной по-настоящему актуальной для beam проблемы.
источник

AB

Alex Bubnov in pro.elixir
(что самое смешное, в кложе в это же самое время - решали, как минимум, вопрос инициализации, результатом чего стал integrant, например)
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Alex Bubnov
вообще, я так смотрю на это всё, и кажется мне, что с появления эликсира не решили по большому счету ни одной по-настоящему актуальной для beam проблемы.
Довольно странное заявление. Есть язык а есть код на нем - это разные вещи
источник

AB

Alex Bubnov in pro.elixir
язык это не код, это комьюнити и майндсет
источник

AB

Alex Bubnov in pro.elixir
ну то есть, код, конечно, есть тоже - но это производная.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Коммунити эликсира писало рельсу все эти годы
источник

AB

Alex Bubnov in pro.elixir
надо подумать мысль, что же можно получить из возможности класть в persistent_term замыкания целиком.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Цель видимо выполнена
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Теперь надо двигаться дальше, хз куда правда
источник

VS

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

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

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

AB

Alex Bubnov in pro.elixir
Vladimir Sekisov
если это довольно абстрактный кусок,
то вынести его в behaviour,
а реализацию можно подставлять в тот же модуль
через compile_env + defdeligate.
Довольно часто используется.
> реализацию можно подставлять в тот же модуль через compile_env + defdeligate.
а можно где-то пример увидеть?
источник

LL

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

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

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

LL

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

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

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

LL

Lama Lover in pro.elixir
Alex Bubnov
отдельный интересный вопрос, кстати, миграции. в экто они намертво прибиты к repo(точнее, приложению, но именно через repo).
> они намертво прибиты к repo

А как ещё может быть? Repo это паттерн, который заключается в том, что есть всего лишь одна сущность, которая исполняет запросы к одной базе
источник

LL

Lama Lover in pro.elixir
две базы — два Repo
источник

LL

Lama Lover in pro.elixir
Какой-нибудь Active Record вообще антифункциональный и в BEAM очень плохо смотрится
источник

AB

Alex Bubnov in pro.elixir
Lama Lover
> они намертво прибиты к repo

А как ещё может быть? Repo это паттерн, который заключается в том, что есть всего лишь одна сущность, которая исполняет запросы к одной базе
я нашел, что  в Ecto.Migrator есть run/4, куда можно руками передать путь до миграций в другом приложении, так что, не всё так плохо.
но то, что Repo как-то связывается с приложением, где он задекларирован, для меня дурно пахнет.
источник