之前有一个关于 MVP 的疑惑:1个 Presenter 能否对应多个 View?,在我的这篇文章中有写过。现在回过头来仔细想想,感觉有点不对劲:1个 Presenter 为什么会有对应多个 View 的需求呢?那篇文章中的使用场景是:
我有 A B C 三个页面,我有一个 Presenter,用来处理一个数据类型的增删改查,但是界面上,A界面只需要查询,B界面只需要删除,C界面只需要增和改。
我们都知道,Presenter 是用来抽离 Activity 或 Fragment 中的业务代码的,何为业务代码?就是这个页面涉及到的业务逻辑。关于数据的增删改查,那是 M 应该做的事,而绝不是 Presenter 该去处理的。 所以,Presenter 应当只对应一个 View,如果有界面复用 Presenter 的情况,那我们得考虑为什么会有这种情况呢?复用 Presenter 代表着业务逻辑是一致的,不同的页面理当有着不同的业务逻辑。当然,这里说的业务是简单,最小颗粒化的业务,如果一个页面十分复杂,Presenter 中集合了大量业务代码,那么在某些小的页面是有可能复用 Presenter 中的部分业务代码的。所以这种情况下,Presenter 会对应多个 View,那么这个场景使用上篇文章中的做法是可以的:复用 Presenter,将 View 抽离,利用继承实现多个界面的定制需求,但不会是上篇文章中的那种使用场景。
more >>