使用MVP
时,应该在哪里存储导航逻辑?是View
还是Presenter
?
Say View1
(由演示者Presenter1
支持)在其视图层次结构中的某个位置有一个按钮PushMeToGo
。按下时,所述按钮应将用户从View1
移动到View2
。
是否应该直接在View2
内处理进入View1
的逻辑,还是应该通知其演示者,然后执行该命令呢?
答案 0 :(得分:0)
5年前在这里提出了这个问题:In MVP, who should handle navigation?。让我做一点贡献。视图应该尽可能虚拟,根本不包含任何业务逻辑(除了直接用户交互,或者说,动画)。因此,View1.PushMeToGo
按钮可以简单地触发事件以通知Presenter1
按下此按钮,并让演示者将导航请求委托给负责在视图之间导航的任何内容(让演示者如同尽可能清洁)。 V-> P通知机制是您自己的:事件总线,简单的观察者,通过Presenter1.onPushMeToGoClicked
通知的单个处理程序,它也在演示者界面中定义。如果您对代码进行单元测试,这也可以让您测试具有虚拟视图的onPushMeToGoClicked
处理程序。