最近也是看了各种关于框架的文章,对mvc和mvp有了更好一点的认识,有必要做做笔记了,首先就是我们在安卓开发中经常用到的所谓的mvc模式,为什么是所谓的呢,下面咱们谈论一下:
MVC:view代表安卓中的xml布局文件,直接和用户打交道,展示给用户, control即activity和fragment,在整个模式中起着组织的作用,model即一些数据库操作和一些网络操作;view所能做的事情太少,基本的逻辑都靠conroller来做,view负责接收用户事件,并将事件发送给controller层,controller根据具体的业务逻辑负责调起model,拿到结果更新view。由于view对model的依赖,从为controller的逻辑非常复杂,在我们写安卓代码的过程中自己也会意识到这一点,不断的在actiivty中或者fragment中加逻辑写代码,代码的可读性非常差,有时候会可以的将一些逻辑抽取出来写到外面,比如activity中包含adaper的时候为了减少activity中的代码复杂度我们会可以的将一部分逻辑代码写到adapter中,来使代码阅读起来更清晰。安卓中的mvc个人感觉还是很松散的,没有那么严格的要求。
MVP:相信大家对这个流行了一段时间的设计模式肯定是听过的,主要来说说他的优点
1:解耦,也是他最大的优点,可以将各个层面之间的耦合性降到最低
2:代码可读性好,我们将view层的行为全部抽象出来,所有的业务逻辑有presenter来操作,presenter持有view的引用,操作完成后回调view做出响应。model中的代码一般不怎么变化。我们在维护代码的时候很容易根据抽象出来的接口来理清逻辑。
3:维护性强:当view和model做出改变的时候我们只需要重新设计出一个presenter来满足需求,当然如果可以在原有的presenter上修改也是可以的。
关于mvp,我们在真正设计代码的时候model也是可以没有的,可以在presenter中直接调取网络数据等,比如现在流行的retrofit和rxjava结合使用在presenter中非常方便。其次就是presenter一般会持有view的引用,这在安卓中很容易造成内存泄露,我们要保证在view销毁的时候即时的释放presenter持有的view。还有一个难点就是我们在代码中如何来保持presenter以免造成资源浪费,关于这个请参考这个文章MVP。