我应该在Elixir Phoenix的控制器或模型中使用Ecto.Repo吗?

托尼·韩

对于Phoenix Controller中的一些查询,有两个针对我的计划

方案1:

defmodule Demo.UserController do
  # ...
  def index do
    # This is just for example
    # The point is Repo in used here
    Repo.all(User) 
  end
end

方案2:

defmodule Demo.User do
  # ...
  def all do
    # Put all Repo API and building query logic in Model
    Repo.all(__MODULE__)
  end
end

我更喜欢Plan2。因为在大多数情况下,我可以将所有关于获取数据的逻辑放在Model中。

但是我发现官方指南在Controller中使用Plan 1(docs / model)和Phoenix默认代码alias Repo,而不是Model(web / web.ex

哪一个更好?又为什么呢

气体

您应该将回购呼叫保留在控制器内。如果您的逻辑很复杂,则应考虑将逻辑移到其自己的服务模块中。

您应该将模型函数视为纯函数(没有副作用),因此它们应仅对数据起作用。因此,例如,您可以拥有:

def alphabetical(query)
  order_by(query, [u], u.name)
end

但是您不应该具有:

def alphabetical(query)
  order_by(query, [u], u.name)
  |> Repo.all
end

这是因为查询纯粹是数据,对的调用Repo.all具有副作用(将转到数据库),因此它属于您的控制器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我应该在可能不使用类的控制器中使用Lazy <T>吗?

我应该在Laravel中使用belongsTo或hasOne吗?

我应该在ECS中使用静态类吗?

我应该在Couchbase中使用本地索引吗?

我应该在Promise中使用return吗?

我应该在Java中使用Qt Jambi吗?

我应该在 Kotlin 的界面中使用属性吗?

我应该在调度块中使用“ weakSelf”吗?

我应该在嵌套块中使用weakSelf吗?

我应该在main(){}中使用#include语句吗?

我应该在钩子中使用useMemo吗?

我应该在BehaviorSubject中使用asObservable吗?

我应该在TDD中使用lambda吗?

我应该在Django模型中测试方法吗?

我应该在模型中抛出HttpStatus异常吗?

我应该在try / except之后使用final吗?

我应该在各处使用React.PureComponent吗?

我应该在“ addClass”之前使用“ hasClass”吗?

Laravel:我应该在循环内使用@include吗?

我应该在 int 列上使用 StringIndexer 吗?

我应该在不同的SATA控制器之间分配驱动器吗?

我应该在控制器的构造函数中注入存储库类或模型类吗?

我应该在控制器和域服务之间放置命令总线吗?

可以或应该在控制器#action 中使用 Task.async() 吗?

我应该在实体框架模型的主键中使用int还是long吗

我们应该在 SpringBoot 中将 @Scheduled 与控制器方法(如 @PostMaping)一起使用吗?

我应该在DTO中使用构建器模式吗?

我应该在我的新闻应用程序项目中使用rss feed吗?

我应该在PromiseKit块中使用[弱自我]吗?