考虑 Uncle Bob的清洁架构(或洋葱架构)
假设我作为应用程序中已登录的User
,收到一个深链接URL"myapp://events/[event_id]"
(例如通过短信)。
当我单击该链接并在屏幕上显示Event
信息时,我想加入该Event
。
该过程的工作方式如下:
- 用户单击链接
- 应用程序接收URL并提取
event_id
- 使用
event_id
,应用程序检索Event
信息 - 应用程序将该信息保存在本地存储中
- 应用程序发送POST请求,让服务器知道新用户(即我)已加入事件
- 应用程序向用户显示检索到的
Event
信息
current_user
的id,这由后端处理(我使用Facebook登录的Parse)。这意味着所有用户身份验证都由Gateway
处理(使用Parse,current_user
的id以PFUser
的形式出现,但对于其他实现,它可能是一个String
,因此必须由Gateway
处理)。
我的问题是,这整个交互(加入Event
)应该由Gateway
还是Interactor
处理?
对我来说,更合理的是 Interactor
处理整个过程:
- 使用
event_id
检索信息 - 将
current_user
添加到Event
- 调用
Gateway
在本地保存Event
)
但如果由一个
Interactor
处理,这意味着该 Interactor
将需要了解 PFUser
(如果我正在使用 Parse),并且如果我停止使用 Parse,则必须更改其实现。
Gateway
处理,那么 Interactor
将只是将 join
调用转发给 Gateway
(joinEventInteractor.join(eventId: String, callback: () -> ()) { eventGateway.join(eventId, callback: callback) }
)。