MVP和非用户互动

时间:2016-11-09 18:36:25

标签: android architecture mvp

我有一个使用MVP模式设计的应用。但有时我不确定我们所有的实现都坚持MVP最佳实践。虽然我并不总是可以通过这本书来解决这个问题,但我试图找出应该处理非用户交互的逻辑。

例如:

我必须检测垂直滚动RecyclerView的偏移量。当滚动达到内容高度的20%(大致)时,我应该弹出一个弹出窗口。现在,我的逻辑将是(伪代码)

1. Presenter sets View.setVerticalOffsetTriggeringLimit(1000 pixels)
2. View triggers view event and call Presenter.offsetForPopUpReached()
3. Presenter triggers View.showPopUp()
4. pop up is shown

优点和缺点?有没有办法在保持可测试代码的同时做得更好?系统本身是一个“用户”,应该使用演示者作为中间层吗?

1 个答案:

答案 0 :(得分:0)

所有UI逻辑都属于View。 Presenter必须只具有Model和View之间的交互逻辑。关键是,View可能不同 - 它可以是UI,也可以是某个模块,通过套接字发送命令。关键是,在两种情况下,表示逻辑' - 由于View与数据的交互保持不变,因此必须移入Presenter。弹出窗口,边距等是View实现细节。 方便练习 - 将Presenter创建为单例并通过DI将其注入到Activity中,然后Activity实现View并将其连接到该View。 您可以通过EventBus(粘性事件)从Presenter发送事件来摆脱Model。如果您这样做,事件将等待活动接收它(激活活动生命周期)。我不久前遇到过这种方法。