我有一个使用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
优点和缺点?有没有更好的方法,同时还有可测试的代码?系统本身是一个“用户”,应该使用演示者作为中间层?
嗯,我可以争辩。在按下按钮之后让演示者更新视图与滚动1000个像素并触发事件没有区别。无论如何,模型始终与视图分离。这完全是关于测试用例,并让Actor不一定是人,但应该平等对待UI的一部分。这种事件不仅仅是UI的东西,而是可能(或可能不)与模型相互作用的整个事件链。 – shadox
是的,我想,你就在这里。尝试在这里使用'mediator' - 界面,用传递给View的RecyclerView抽象滚动事件及其实现。它可以替换为模拟测试。 –