MVC,model,view,controller,是软件代码结构中最常见的一种框架,通过controller的控制去操作model层的数据,并且返回给view层展示。其原理是用户触发view层的事件后,会发送指令到controller层,再由controller层去通知model层数据改变,model层更新完数据后显示在view层上。
在android中,mvc架构中的model层对应的就是一些bean,也就是数据实体类,v对应的就是一些xml文件,c对应的就是activity,举个栗子,当用户进入到app的登陆界面时,输入手机号和密码,点击登陆按钮,LoginActivity中的login.xml就发送用户的输入给LoginActivity让它去通知Model层进行数据逻辑处理,并返回给login.xml做出界面的改变。
MVC的缺点,由于界面都是写在xml里,而且xml并不能对界面进行动态的改变,因此在activity里就难免有些操作界面元素的代码,造成了C既是Controller又是View的情况,代码维护起来是比较麻烦的。另外,M与V是相互可知的,代码间存在耦合度也是比较大的。
MVP,是在MVC的基础上演进的一种代码架构,它是把Presenter作为沟通M和V的桥梁,把事件的处理全都交由Presenter,而之前的activity或者fragment就充当view层,这个架构使M与V解耦,对于M与P之间可以通过定义一些接口实现,例如用fragment 去实现一些在presenter中定义好的接口,而由activity去管理fragment。
MVP的缺点是接口可能会太多,这时需要充分利用基类接口,把一些常用的逻辑写在基类接口里。
MVVM是把presenter变成ViewModel层,view 和ViewModel是相互绑定的关系,当ViewModel层的数据改变时,View层的数据也会改变。