Elixir / Phoenix控制器助手的惯用函数名称

时间:2018-11-11 17:47:56

标签: elixir phoenix-framework

我正在Phoenix网络应用程序中编写一些get助手。在Rails中,通常会命名(或缺少方法)诸如find_account_by_email(email)之类的助手。

模式匹配似乎是Elixir / Erlang的核心,我想知道我是否最好像这样写我的助手:

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

Phoenix坚持使用get_account(id)方法,所以在我看来,通过模式匹配重用该名称更惯用了吗?

1 个答案:

答案 0 :(得分:4)

欢迎堆栈溢出!

尽管被称为“ Rails for Elixir”,但设计模式和体系结构方面的考虑却大不相同。公开“可能用于一堆东西” 的随机函数并不是真正的哲学。


但是,好的部分是,如果您的用例确实需要这样的东西,那么使用宏,行为或协议来扩展现有功能非常容易。 对于您的简单用例,您确实可以创建一个通用方法(或一组方法),但是我会丢失tuple

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

您可以使用以下方式调用它:

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

但是我会争论是否要用一种替换另一种,确实在代码库中增加了足够的价值以保证它。


侧注: actually created a library将Rails样式的模型助手添加到Elixir应用程序的Ecto模式中,以使Rails开发人员易于使用Phoenix,并公开类似的方法活动记录的作用。另请参见note about complex queries