这个就写的挺好的,有理有据!!!!
以下仅做个人学习笔记使用:
框架、设计架构:是代码重用(例:MVC)
设计模式:是设计重用(例:工厂模式)
框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示;设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。可以说,框架是软件,而设计模式是软件的知识。
MVC:Module(模型层)——View(视图层)——Controller(控制层)
M层:处理数据和业务逻辑,在Android中我们通常会将网络请求模块独立封装出来,数据请求成功后通过Handler通知Activity,这里的封装就是C层的体现。
V层:处理界面的显示结果,在Android中就通过XML编写的UI布局来体现。
C层:起到桥梁的作用,控制V层和M层通信以此来达到视图和业务逻辑的分离,在Android中的体现就是Activity。
在MVC框架中,View和Module通过Activity链接和分离。但是,Activity并不是一个单纯的Controller,不仅要和用户交互还要初始化界面还要加载数据,随着业务逻辑的增长Activity会愈发的臃肿。所以,就出现了MVP框架模式。
MVP:Module(模型层)——View(视图层)——Presenter(控制层)
- View:负责绘制UI元素、与用户进行交互(在Android中体现为Activity)
- Model:负责存储、检索、操纵数据(有时也实现一个Model interface用来降低耦合)
- Presenter:作为View与Model交互的中间纽带,处理与用户交互的负责逻辑。
- View interface:需要View实现的接口,View通过View interface与Presenter进行交互,降低耦合,方便进行单元测试
具体到Android中,一般可以将App根据程序的结构进行纵向划分,根据MVP可以将App分别为模型层(M),UI层(V)和逻辑层(P)。
UI层一般包括Activity,Fragment,Adapter等直接和UI相关的类,UI层的Activity在启动之后实例化相应的Presenter,App的控制权后移,由UI转移到Presenter,两者之间的通信通过BroadCast、Handler或者接口完成,只传递事件和结果。
举个简单的例子,UI层通知逻辑层(Presenter)用户点击了一个Button,逻辑层(Presenter)自己决定应该用什么行为进行响应,该找哪个模型(Model)去做这件事,最后逻辑层(Presenter)将完成的结果更新到UI层。
MVC和MVP两者的区别:
- View与Model并不直接交互,而是通过与Presenter交互来与Model间接交互。而在MVC中View可以与Model直接交互
- 通常View与Presenter是一对一的,但复杂的View可能绑定多个Presenter来处理逻辑。而Controller是基于行为的,并且可以被多个View共享,Controller可以负责决定显示哪个View
- Presenter与View的交互是通过接口来进行的,更有利于添加单元测试。