Size: a a a

2021 March 05

B

Bogdan in pro.elixir
Dmitry Russ (Aleksandrov)
Не понимаю, что там "реально облом"
Если все работает то облома нету)
источник

DR

Dmitry Russ (Aleksan... in pro.elixir
Помимо clickhouse-а, который завязан на Intel-овский процессор и не билдит image-и под арм - всё работало.
источник

AD

Anastasiya Dyachenko in pro.elixir
Всем привет, вопрос по неймингу.
Есть базовая функция создания объекта, а есть функция создания объекта с бизнес логикой, которая использует первую. Например:

def create_message1(...) do
 %Message{}
 |> Message.changeset()
 |> Repo.insert()
end

def create_message2(...) do
 with {:ok, message} <- create_message1(...),
      {:ok, _} <- create_log(...) do
   {:ok, message}
 end
end

Вопрос - где вы храните обе функции, в одном контексте или как-то дополнительно разделяете? и как называете обе функции?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Есть контекст а есть сервис
источник

AD

Anastasiya Dyachenko in pro.elixir
Źmićer Rubinštejn
Есть контекст а есть сервис
а можешь привести пример как выглядит сервис и где находится? может статья какая-нибудь хорошая есть?
источник

LL

Lama Lover in pro.elixir
Anastasiya Dyachenko
Всем привет, вопрос по неймингу.
Есть базовая функция создания объекта, а есть функция создания объекта с бизнес логикой, которая использует первую. Например:

def create_message1(...) do
 %Message{}
 |> Message.changeset()
 |> Repo.insert()
end

def create_message2(...) do
 with {:ok, message} <- create_message1(...),
      {:ok, _} <- create_log(...) do
   {:ok, message}
 end
end

Вопрос - где вы храните обе функции, в одном контексте или как-то дополнительно разделяете? и как называете обе функции?
А зачем две функции?
Может вам стоит разделить понятия операции создания сущности (типа там создать пользователя с уникальными именем, записать это в лог, прислать ему письмо об этом и т.д.) и понятие создания сущности (просто записать в базу)

Первую функцию должен предоставлять контекст или сервис
Вторую функцию предоставляет модуль-сущность, хотя я больше люблю чтобы модуль сущность предоставлял changeset-ы и multi
источник

AD

Anastasiya Dyachenko in pro.elixir
так я их разделяю, вопрос как сделать это в коде
источник

AD

Anastasiya Dyachenko in pro.elixir
Lama Lover
А зачем две функции?
Может вам стоит разделить понятия операции создания сущности (типа там создать пользователя с уникальными именем, записать это в лог, прислать ему письмо об этом и т.д.) и понятие создания сущности (просто записать в базу)

Первую функцию должен предоставлять контекст или сервис
Вторую функцию предоставляет модуль-сущность, хотя я больше люблю чтобы модуль сущность предоставлял changeset-ы и multi
ну т.е. записать create_message1 не в контекст, а в модуль-сущность?
источник

LL

Lama Lover in pro.elixir
Anastasiya Dyachenko
так я их разделяю, вопрос как сделать это в коде
Ну в коде это точно должно быть в разных модулях, типа это разные слои архитектуры (если у вас чистая архитектура)
источник

AD

Anastasiya Dyachenko in pro.elixir
ну я и пытаюсь разделить по разным слоям, просто в гайдах того же феникса и тд ничего похожего нет
источник

AD

Anastasiya Dyachenko in pro.elixir
создавать отдельный модуль для каждой операции мне кажется излишним
источник

AD

Anastasiya Dyachenko in pro.elixir
тогда нужна какая-то структура этих модулей-сервисов
источник

AD

Anastasiya Dyachenko in pro.elixir
Anastasiya Dyachenko
создавать отдельный модуль для каждой операции мне кажется излишним
я пыталась откатиться от этого варианта и делать как пишут в phoenix все в контекстах, но тоже кажется не очень
источник

LL

Lama Lover in pro.elixir
Не, ну я всегда на такой пример ориентируюсь
Есть модуль-сущность User из которого торчат create_changeset, list_all_query и всё такое
Есть модуль-контекст Registration (или Auth), который типа "владеет" User-ом и делает register_user(attrs) :: {:ok, User.t()} | {:error, reason()} и всё такое

И этот register_user выполняет проверку на уникальность, регистрацию, логгирование и всё такое
источник

AN

Alexey Novoselov in pro.elixir
Anastasiya Dyachenko
я пыталась откатиться от этого варианта и делать как пишут в phoenix все в контекстах, но тоже кажется не очень
Обычно разделяют чистые и грязные функции на разные модули, Changeset с проверками это чистые функции, вызов Repo это всегда грязная операция
источник

AN

Alexey Novoselov in pro.elixir
Так код и тесты понятнее
источник

Н

Николай in pro.elixir
Грязные в каком плане?
источник

AN

Alexey Novoselov in pro.elixir
Николай
Грязные в каком плане?
разный результат с оддинаковыми входными параметрами
источник

LL

Lama Lover in pro.elixir
Николай
Грязные в каком плане?
Есть сайд-эффекты
источник

Н

Николай in pro.elixir
Понятно, спасибо.
источник