【发布时间】:2015-03-26 11:23:51
【问题描述】:
我在处理从另一个模块提供的模块返回的某些信息时遇到问题。就我而言,我有两个模块,地图和搜索。 MapView 通知它要搜索地址,因此MapPresenter 开始显示搜索模块的操作(其视图以模态方式显示)。在搜索模块中,我进行文本搜索,获取结果,显示并选择一个。该选择必须返回到地图模块。如何在不打破界限的情况下实现这一目标?
考虑到,如果我错了,请纠正我,模块之间的通信只能通过路由来实现(而不是通过通知、完成块等在模块之间“跳转”),我实现了这个场景:
(对不起,也许序列图会更好)
MapWireframe 实现了常规接口,但也实现了另一个我称为MapModuleInput 的接口,所以当我开始搜索操作(蓝色)时,我将SearchWireframe 传递给实现该接口的MapWireframe。
之后,在红色流程中,在SearchView我开始搜索的情况下,它从交互器等处获取结果。然后呈现结果并且用户选择一个(绿色),所以选择结果通过MapModuleInput接口返回给地图。
那么,对吗?
谢谢!
【问题讨论】:
-
您的问题得到答案了吗?我有一个类似的stackoverflow.com/questions/28892833/…
-
我认为问题在于 VIPER 来自 Robert Martin 的 Clean Architecture,并且他来自 Web(Rails)背景,因此他对状态的考虑不多。这主要是我的问题,状态(搜索结果选择,以防你不立即关闭,但仍然想更新后面的MapView)应该存储在哪里,不同的模块应该如何通信,应该通过Wireframe ,或通过@PaNaVTEC 建议的数据库,或通过演示者相互通信,如github.com/objcio/issue-13-viper-swift。
标签: ios architecture