关于MVP设计与实现的思路

M(Modle)+V(View)+P(Presenter)。
M:数据模型层,操作和管理数据模型。
V:视图层,操作和管理View
P:连接M和V层,形成M和V层的功能衔接后者通信。

那么P层是不是应该直接持有V层中的顶级View?
如果一旦持有,并且尝试获取子View,那么P层中就可以形成View与数据的直接交互,P层就退化层一个Controller,最终的结果是:View和Modle一致耦合在一起,MVP变成了MVP.

正确的设计思路是:
思路1:P层持有V层行为的接口IV引用,而V层实现该IV,这样P层永远通过IV中的接口去指导V层做事情,向V层传递必要的数据,而不是直接操作View。这样才能做到真正的隔离。
思路2:持有V层引用,并且只使用V层对外暴露的操作View的接口,而不是直接操作View。

使用IV接口的好处:便于直观的看到V层的操作逻辑有哪些。并且在替换新的V层实现时,完全不需要更改P层实现。

那么P层是不是应该直接持有M层的引用?
可以直接持有,因为M层内部已经完成了对于数据的细节处理,而仅仅使用暴露出来的接口或者方法,已经具备了解耦性。也可以设计IM接口,好处同IV。

你可能感兴趣的:(关于MVP设计与实现的思路)