代码之家  ›  专栏  ›  技术社区  ›  Oleksii.al

Elixir/Phoenix 1.3拆分上下文

  •  1
  • Oleksii.al  · 技术社区  · 7 年前

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

    编辑

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

    这个例子来自凤凰社的hexdocs。下午

    1 回复  |  直到 7 年前
        1
  •  2
  •   PatNowak    7 年前

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

    现在,您的结构如下所示:

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

    所以要么你可以拆分 credentials users 进入完全孤立的环境,这可能不是最好的主意,因为它们与当前 Accounts 或尝试从将其作为子上下文引入中获益。很可能您会与用户和凭据发生名称冲突。这仍然是可行的。

    资格证书 可能成为 authentication 上下文,如果你想这样设计。您可以选择几种方法来解决这个问题。

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

    最好的建议是考虑代码接下来会发生什么,并尝试以某种合乎逻辑的方式将这些事情排序在一起- 资格证书 仅针对用户,但它们是授权用户的方式之一,因此您可以将它们分组为模式和授权的子上下文或帐户上下文。