一步一步的实现Android的mvp框架
来源:互联网 发布:单片机usb通讯 编辑:程序博客网 时间:2024/05/18 01:39
使用android的框架,首先我们应该了解,使用框架的目的。框架最终的目的就是增强项目代码的可读性,维护性和方便测试。
要解决这三个问题,核心思想就是两种,一种是分层,一个是模块化。两个方法的目的就是为了解耦。
mvc框架,简单的来理解就是,Activity或者Fragment直接与数据层交互,activity通过api Provider进行网络访问,或者通过cache provider读取本地缓存,然后再返回或者回调里对Activity的界面进行相应刷新。
我们做一个一个设想,加入一次数据访问可能需要同时访问api和cache,或者一次数据请求需要请求两次api。对于activity来说,它即与界面的展示,事件等有关系,又与业务数据层有着直接的关系,无疑activity层会急剧膨胀,变得极难阅读和维护。在这种结构下,activity同时承担了view层和controller层的工作,所以我们需要给activity减负。
mvp的网络层次模型:
看一个简单的小例子,如下所示。
public class MainActivity extends Activity implements MainView{ MainPresenter presenter; TextView mShowTxt; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mShowText=(TextView)findViewById(R.id.text1); loadDatas(); } public void loadDatas(){ presenter = new MainPresenter(); presenter.addTaskListerer(this); presenter.getString(); } @Override public void onShowString(String str){ mShowTxt.setText(str); }}
Activity里面包含了几个文件,一个是View层的对外接口MainView,一个是P层Presenter。
首先对外接口MainView文件。
public interface MainView{ void onShowString(String json);}
Presenter层的文件如下。
public class MainPresenter { MainView mainView; TaskManager taskData; public MainPresenter() { this.taskData = new TaskManager(new TaskDataSourceImpl()); } public MainPresenter test() { this.taskData = new TaskManager(new TaskDataSourceTestImpl()); return this; } public MainPresenter addTaskListener(MainView viewListener) { this.mainView = viewListener; return this; } public void getString() { String str = taskData.getTaskName(); mainView.onShowString(str); }}
可以单刀Presenter层是连接Model层和View层的中间层,因此持有View层的接口和Model层的接口,这里就可以看到MVP的优势了。
DataManager.java
<pre name="code" class="java">/** * 从数据层获取的数据,在这里进行拼装和组合 */public class TaskManager { TaskDataSource dataSource; public TaskManager(TaskDataSource dataSource) { this.dataSource = dataSource; } public String getShowContent() { //Todo what you want do on the original data return dataSource.getStringFromRemote() + dataSource.getStringFromCache(); }}
TaskDataSource.java文件
/** * data 层接口定义 */public interface TaskDataSource { String getStringFromRemote(); String getStringFromCache();}
public class TaskDataSourceImpl implements TaskDataSource { @Override public String getStringFromRemote() { return "Hello "; } @Override public String getStringFromCache() { return "World"; }}
TaskDataSourceTestImpl.java
public class TaskDataSourceTestImpl implements TaskDataSource { @Override public String getStringFromRemote() { return "Hello "; } @Override public String getStringFromCache() { return " world Test "; }}
从上面几个文件来看, TaskDataSource.java 作为数据层对外的接口, TaskDataSourceImpl.java 是数据层,直接负责数据获取,无论是从api获得,还是从本地数据库读取数据,本质上都是IO操作。 TaskManager 是作为业务层,对获取到的数据进行拼装,然后交给调用层。
1 0
- 一步一步的实现Android的mvp框架
- 如何一步一步实现Android的MVP框架
- 【腾讯Bugly干货分享】一步一步实现Android的MVP框架
- 实现Android的MVP框架
- Android的MVP框架
- 初试Android的MVP框架
- Android中MVP框架的使用
- Android的MVP框架(MVPExtend)
- 【Android - 框架】之MVP模式的使用
- 【Android - 框架】之Dagger2+MVP的用法
- Android 开发中MVP框架的应用
- Android MVP框架和简单的使用
- 如何一步一步写出MVP架构的代码
- MVP的框架
- 简单的MVP框架
- 一步一步实现一款实用的Android广告栏
- Android MVP设计模式的最佳实现
- Android mvp的简单使用和实现
- A+B Problem III
- pwn专用虚拟机的简单工具配置
- activity从底部弹出动画
- makefile的语法及写法
- Git使用心得(二)
- 一步一步的实现Android的mvp框架
- 这里是标题
- Coreseek多表索引搜索(转载)
- 初学者的福利7
- 七夕来了,你搞清楚对象了吗?!
- Android 图片加载及缓存技术解析
- mysql workbench快捷键小结
- CentOS下LAMP网站架构之Apache性能调优篇
- 一个很好的makefile例子(经典)