在Android上用MVP模式编程的实践

首先,谁是V?谁是P?(M我认为不是问题)

View,应该是实现显示逻辑,在Android开发中,我们认为Fragment、Activity都可以被当做View,他们主要任务就是控制显示逻辑,这部分代码不太经常重用。View通过调用P的业务逻辑,来实现业务。业务包括同步的业务(可以在UI线程操作)和异步的任务(如网络、磁盘IO等耗时操作),并根据P的业务返回结果来响应地改变UI。

对Presenter的实现,我们用AndroidAnnotations框架的EBean实现(如果不熟悉这个框架,请Google)。对于异步任务,通过AA的@Background标签来做,他的实现原理是讲任务通过一个线程池进行调度。对异步任务的返回结果,我们自定义了一个View标签,通过接口回调回去(View甚至可以不实现接口,当然就没有回调了)。这样无论View调用Presenter,还是Presenter回调View,都是通过接口实现,完全剥离了两者之间的耦合,P层的业务可以高度重用。

为了实现这个目标,我们对AndroidAnnotations做了一点扩展,Github地址在:https://github.com/ChatGame/androidannotations

时间: 2024-10-21 20:10:58

在Android上用MVP模式编程的实践的相关文章

Android上的MVP模式

什么是MVP? MVP模式可以分离显示层和逻辑层,所以功能接口如何工作与功能的展示可以实现分离,MVP模式理想化地可以实现同一份逻辑代码搭配不同的显示界面.首先要澄清就是MVP不是一个结构化的模式,它只是负责显示层而已,任何时候都可以在自己的项目结构中使用MVP模式. 为什么要使用MVP? 我们知道在Android上逻辑接口和数据存取是紧耦合的,这个问题可以看看CursorAdapter这个例子,它既融合了适配器,同时也有显示的成分,而cursor很大程度上应该是数据数据存取层的. 对于一个可扩

Android上实现MVP模式的途径

今天我想分享我在Android上实现MVP(Model-View-Presenter)模式的方法.如果你对MVP模式还不熟悉,或者不了解为什么要在Android应用中使用MVP模式,推荐你先阅读这篇维基百科文章和这篇博客. 使用Activity和Fragment作为View合适么? 目前,在很多使用了MVP模式的Android项目中,主流做法是将Activity和Fragment作为视图层来进行处理.而Presenters通常是通过继承被视图层实例化或者注入的对象来得到的.我认可这种方式可以节省

Android上的MVP:如何组织显示层的内容

MVP(Model View Presenter)模式是著名的MVC(Model View Controller)模式的一个演化版本,目前它在Android应用开发中越来越重要了,大家也都在讨论关于MVP的理论,只是结构化的资料非常少.这就是我写这篇博客的原因,我想鼓励大家多参与讨论,然后把MVP模式运用在项目开发中. 什么是MVP? MVP模式可以分离显示层和逻辑层,所以功能接口如何工作与功能的展示可以实现分离,MVP模式理想化地可以实现同一份逻辑代码搭配不同的显示界面.首先要澄清就是MVP不

Android开发中MVP模式浅析

目前为止,MVP的使用还没有一个标准,在此先记录一下目前学习到的一些Android中使用MVP的知识. 按传统的方式开发,经常会使Activity中混杂着UI交互,业务逻辑等流程.而MVP模式能巧妙的解决这个问题.先直接上一个小例子吧. /** * 定义一个对UI组件进行操作的接口,让Activity实现这个接口 * @author Quinn * @date 2015-5-9 */ public interface LoginView { public void showProgress();

Android之 用MVP模式 来实现webview 历史记录保存与显示

MVP在android上是常见的一种设计模式,在Launhcer,手机浏览器里面经常会看到,观摩了下其他大神写的,现在总结下,操刀起来写个demo 有什么问题的地方请提出来. 大家一起研究讨论. demo 下载地址;http://download.csdn.net/detail/xufeifandj/8267619 demo主要是 主页是一个webview,实现了 历史记录的添加,与显示.例子比较简单. 整个项目的结构如下: HistoryPresenter.java 主要是对view与mode

Android开发之MVP模式的使用

前几天发现,在Android项目代码里有一个Activity类行数居然有1000多行,而600行左右都是逻辑控制,真正和页面控件处理相关的代码不多,虽然可以用#region <>...#endregion块包起来,但是整体来说,页面和逻辑处理揉得太紧密了,有时代码复用起来也不方便,于是,决定重构,找了一下,有MVP(Model-View-Presenter,Model层负责数据管理,View层负责页面控件数据展示与设置,Presenter负责逻辑处理,控制View层如何显示与展示数据,这种层次

Android上的OpenVPN-TAP模式/策略路由

睡醒写一篇日志.在Android的OpenVPN Service的FAQ上,关于TAP模式有三问三答,最后回答的建议是:Support TAP via emulation.这也是我自己前几个月实现过的.要问为何Android自己不能提供对TAPmode的支持,似乎不关VPNService作者本人的事,其建议是:If you really want to see tap-style tunnels supported in OpenVPN Connect, we would encourage y

扩展AndroidAnnotations使用MVP模式编程

上代码 Activity实现一组接口,用来对View进行操作 public class MainActivity extends Activity implements TestView{ //MVP中的P,一个View可以有多个P,实现多组业务逻辑,比如在主界面还需要读取Conversation 的内容 @Bean(TestActions.class) ITestActions testActions; @ViewById(R.id.btn_back) Button btnBack; @Vie

Android开发学习--MVP模式入门

1.模型与视图完全分离,我们可以修改视图而不影响模型2.可以更高效地使用模型,因为所有的交互都发生在一个地方--Presenter内部3.我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑.这个特性非常的有用,因为视图的变化总是比模型的变化频繁.4.如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试) 下面示例一个小案例: 项目架构: 首先bean层: User.java public class User { privat