【发布时间】:2016-05-14 21:28:21
【问题描述】:
考虑Uncle Bob's Clean Architecture(或洋葱架构)
假设在我的应用程序中登录User,我收到一个深层链接网址"myapp://events/[event_id]"(例如通过短信)。
当我点击链接并在屏幕上显示Event 的信息时,我想加入那个Event。
流程如下:
- 用户点击链接
- 应用程序接收到 url 并提取
event_id - 应用程序使用
event_id检索Event的信息 - 应用将该信息保存在本地存储中
- 应用发送 POST 请求,让服务器知道有新用户(我)加入了活动
- 应用将检索到的
Event的信息显示给用户
当应用发送 POST 请求加入活动时,它会发送 current_user 的 id,由后端处理(我使用 Parse 和 Facebook 登录)。这意味着所有用户身份验证都由Gateways 处理(使用 Parse,current_user 的 id 以PFUser 的形式出现,但在其他一些实现中它可能是String,所以它必须是由Gateway's 处理)。
我的问题是,整个交互(加入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) })。
【问题讨论】:
标签: ios architecture onion-architecture