Идиоматические имена функций для помощников контроллера Elixir / Phoenix - PullRequest
0 голосов
/ 11 ноября 2018

Я пишу несколько get помощников в моем веб-приложении Phoenix. В рельсах вы обычно называете (или пропускаете метод) помощники, такие как find_account_by_email(email) и т. Д.

Учитывая, что сопоставление с образцом кажется таким ключевым для Elixir / Erlang, я задаюсь вопросом, лучше ли мне писать таких помощников, как:

def get_account({email: email}) do
  # ...
end

Phoenix заглушает метод get_account(id), поэтому мне кажется, что повторное использование имени с сопоставлением с образцом более идиоматично?

1 Ответ

0 голосов
/ 12 ноября 2018

Добро пожаловать в переполнение стека!

Хотя можно было бы назвать «Rails for Elixir», шаблоны проектирования и архитектурные соображения очень разные. Предоставление случайных функций, которые «могут использоваться для множества вещей», на самом деле не является частью философии.


Но хорошая сторона в том, что если ваш сценарий использования требует чего-то подобного, очень легко расширить существующую функциональность с помощью макросов, поведения или протоколов. Для вашего простого варианта использования вы действительно можете создать универсальный метод (или набор методов), но я бы потерял tuple:

defmodule Account do
  def get(clauses) do
    Repo.get_by(Account, clauses)
  end
end

Вы можете позвонить, используя:

Account.get(email: "user@example.com")

Но я бы поспорил, если замена одного однострочного на другой действительно добавит достаточную ценность вашей кодовой базе, чтобы это оправдать.


Примечание: Я фактически создал библиотеку для добавления помощников модели в стиле Rails к схемам Ecto в приложениях Elixir для упрощения работы разработчиков Rails в Phoenix , подвергая методы, подобные тому, что делает active-record. Также см. Примечание о сложных запросах .

...