考虑上下文的一种方法是在设计应用程序时将其视为抽象层。当它被放入
the docs
,
凤凰计划的结构像Elixir和任何其他药剂。
项目我们将代码分成上下文。上下文将分组
相关功能,如帖子和评论,通常封装
数据访问和数据验证等模式。通过使用上下文,
我们将系统分离并隔离成可管理的、独立的
部分。
因此,模型本身及其底层模式是分组到上下文中的单元。模型可以有更细粒度的api,这是它们内部工作所必需的。上下文反过来只公开对其他应用程序组件或上下文有用的方法,从而隐藏模型的底层实现细节。
不必通过模型级别向下扩展上下文边界以实现绝对隔离。相反,您像往常一样创建模式,在模型上使用所有需要的多对多关系。然后直接在模型上实现任何低级方法。只将那些方法放在上下文中,这些方法要么是上下文的公共api,要么是涉及多个模型的私有方法。
更新
在你的场景中,你可能有。
Chats
你把
rooms
方法。它的签名可能是。
Chats.rooms_of(user)
.
Repo.get()
也会转到上下文,例如。
def get(id), do: Repo.get(User, id)
. 模型最终包含变更集、验证方法、私有方法,而不依赖于其他模型。上下文反过来获取该组公开可用的大多数业务逻辑方法。