Elixir / Phoenix 1.3分裂背景

时间:2018-02-22 13:09:50

标签: elixir phoenix-framework

在Phoenix 1.3中建议将所有业务逻辑放入上下文中,但是一个上下文可以处理很多实体(我不知道正确的单词,因为Phoenix 1.3中不再存在“模型”)并且它会增长很快。将上下文拆分成多个文件的正确方法是什么?

修改

我有帐户上下文和两个实体:用户和凭据。即使有这两个实体,上下文看起来也有点复杂。我必须滚动用户的功能才能到达Credential的功能。现在它不是一个真正的问题,但我想在一个上下文中可以有超过2个实体,然后它可能非常庞大。或者我错了吗?

这个例子来自phoenix的hexdocs.pm

1 个答案:

答案 0 :(得分:2)

这是非常重要的问题,但实际上,您完全取决于您希望如何组织代码。凤凰不会影响你的任何风格,即使是上下文只是建议设计意图代码

现在你的结构如下:

lib
  > accounts
    > accounts.ex
      user.ex
      credentials.ex

因此,您可以将credentialsusers拆分为完全隔离的上下文,这可能不是最好的主意,因为它们与当前Accounts上下文相关或尝试从中受益将它们作为子上下文引入。可能你会落入与用户和凭据冲突的名称。还是可行的。

如果您想以这种方式设计,

credentials可能会成为authentication上下文的一部分。您可以通过以下几种方式解决这个问题。

假设您希望保留当前结构,但引入子上下文,但最后,您仍然希望通过主上下文调用它们,您可以在此处使用defdelegate

最好的建议是考虑代码接下来会发生什么,并尝试以某种逻辑方式对事物进行排序 - credentials仅适用于用户,但它们是授权用户的方式之一,因此您可以将它们分组为模式和子上下文以用于授权或帐户上下文。