MVC(Model-View-Controller)是最常见的一个软件架构,软件可以分成三个部分
- 模型(Model):数据保存
- 视图(View):用户界面。
- 控制器(Controller):业务逻辑
它们三个的通信过程
- View 传送指令到 Controller
- Controller 完成业务逻辑后,改变 Model的状态
- Model 将新的数据发送到 View,用户得到反馈
它的通信都是单向的。
Android中的MVC进行了代码的分离,但是分离程度不够,Activity依旧需要处理UI,处理用户交互,承担部分View的角色,C层跟V层缠在一起,太紧密了,都在Activity中,C层干预V层太多,进化成MVP
MVP 模式将 Controller 改名为 Presenter,同时改变了通信方向。
- 各部分之间的通信,都是双向的。
- View 与 Model 不发生联系,都通过 Presenter 传递。
- View 非常薄,没有任何业务逻辑,就是一个"被动视图",没有任何主动性,而Presenter非常厚,所有业务逻辑在那里,P层通过M层拿数据,通过V层显示,具体内容都是各自管。V层xml跟Activity
MVP
优点:统一了编程规范,代码比较清晰,做到了代码分层和解耦
缺点:类变多,增加了各种回调的接口,代码变得更加复杂,不利于维护
MVVM 模式将 Presenter 改名为 ViewModel,其实本质就是 MVP + 数据绑定
数据 : 1.外部数据(数据库,网络上的)2.内存数据 3.表现数据,要改变一起都变
通过观察者模式监听数据的变化,规避了MVP的双向依赖,但是会导致多数据流的问题,缺少唯一修改源,不易于追踪。