交互器还是网关 - Uncle Bob的干净架构。

3

考虑 Uncle Bob的清洁架构(或洋葱架构)

假设我作为应用程序中已登录的User,收到一个深链接URL"myapp://events/[event_id]"(例如通过短信)。

当我单击该链接并在屏幕上显示Event信息时,我想加入该Event

该过程的工作方式如下:

  • 用户单击链接
  • 应用程序接收URL并提取event_id
  • 使用event_id,应用程序检索Event信息
  • 应用程序将该信息保存在本地存储中
  • 应用程序发送POST请求,让服务器知道新用户(即我)已加入事件
  • 应用程序向用户显示检索到的Event信息
当应用程序发送POST请求加入事件时,它会发送current_user的id,这由后端处理(我使用Facebook登录的Parse)。这意味着所有用户身份验证都由Gateway处理(使用Parse,current_user的id以PFUser的形式出现,但对于其他实现,它可能是一个String,因此必须由Gateway处理)。 我的问题是,这整个交互(加入Event)应该由Gateway还是Interactor处理? 对我来说,更合理的是 Interactor 处理整个过程:
  1. 使用 event_id 检索信息
  2. current_user 添加到 Event
  3. 调用 Gateway 在本地保存 Event)


  4. 但如果由一个 Interactor 处理,这意味着该 Interactor 将需要了解 PFUser(如果我正在使用 Parse),并且如果我停止使用 Parse,则必须更改其实现。
如果由一个 Gateway 处理,那么 Interactor 将只是将 join 调用转发给 Gateway (joinEventInteractor.join(eventId: String, callback: () -> ()) { eventGateway.join(eventId, callback: callback) })。
1个回答

1

您的网关不应该有任何业务逻辑,将您的逻辑保留在交互器内,并将网关仅作为边界处理。从名称上看,它应该指向您的交互器,如果您在那里添加任何逻辑,则违反了单一职责原则。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接