我正在Phoenix网络应用程序中编写一些get
助手。在Rails中,通常会命名(或缺少方法)诸如find_account_by_email(email)
之类的助手。
模式匹配似乎是Elixir / Erlang的核心,我想知道我是否最好像这样写我的助手:
def get_account({email: email}) do
# ...
end
Phoenix坚持使用get_account(id)
方法,所以在我看来,通过模式匹配重用该名称更惯用了吗?
答案 0 :(得分:4)
欢迎堆栈溢出!
尽管phoenix-framework被称为“ 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。