Android MVP设计模式的理解
来源:互联网 发布:淘宝中药材哪家好知乎 编辑:程序博客网 时间:2024/05/15 06:14
做Android开发久了会有一种感觉,那就是业务逻辑总是伴随大量UI更新操作,最后我们的代码中UI更新伴随业务逻辑,业务逻辑发生伴随UI更新。如此纠缠,当一个类的代码越来越多的时候,过些日子再回头看,很乱很乱。作为一个长期运营的项目,这种做法是不可取的,当项目交到下一个人的手里,我只想说God will be with you. 所以从今以后,我们必须采取新的开发模式,尽管看起来繁琐一些,但是理解了思想就会发现你可以从业务逻辑和UI的纠缠中解放出来。
先谈谈我个人对MVP模式的理解:服务端一般是MVC,其实两者名字不同,但相差并不大,核心的思想都是将业务逻辑同展现分离。隔离最好的方式就是使用接口,使得不同的组件依赖于抽象的接口,不依赖具体的实现,当修改代码的时候,由于接口不变,而我们的业务逻辑依赖于接口,因此得到了解放。
活用MVP:并不是工程里一定要有M,但是V和P是一定要有的,P负责了业务逻辑的处理,并调用相应的更新UI的接口V,这里再次强调一下,业务逻辑是依赖于更新UI的抽象接口的。说的这么抽象,看个简单的例子。
这个例子模拟程序的启动页,当程序启动的时候去获取网络状态,显示进度条模拟更新数据,获取成功就跳到下一个activity并关闭进度条,获取失败就提示用户失败
新建一个Android工程,新建包com.model com.model.impl com.view com.presenter
在com.model下建立一个接口INetConnect:
package com.model;import android.content.Context;/** * 负责获取网络状态的接口 * */public interface INetConnect { boolean isNetConnect( Context context);}
在com.model.impl下建立一个INetConnect具体实现类INetConnectImpl:
package com.model.impl;import com.model.INetConnect;import android.content.Context;import android.net.ConnectivityManager;import android.net.NetworkInfo;/** * 获取网络状态的一种实现方式 * */public class INetConnectImpl implements INetConnect { @Override public boolean isNetConnect(Context context) { if (context != null) { ConnectivityManager mConnectivityManager = (ConnectivityManager) context .getSystemService(Context. CONNECTIVITY_SERVICE); NetworkInfo mNetworkInfo = mConnectivityManager .getActiveNetworkInfo(); if(mNetworkInfo != null) { return mNetworkInfo.isAvailable(); } } return false; }}
接着在com.view下定义一组更新UI的接口ISplashView:
package com.view;/** * 更新UI视图的接口,每个Activity一个这样的接口 * */public interface ISplashView { void showProcessBar(); void hideProcessBar(); void showNetError(); void startNextActivity();}
再编写我们的业务逻辑实现类SplashPresenter:
package com.presenter;import com.model.INetConnect;import com.model.impl.INetConnectImpl;import com.view.ISplashView;import android.content.Context;/** * 我们的业务逻辑实现,这个过程调用的都是接口完成的,不依赖具体实现。 * 每个Activity一个这样的Presenter * */public class SplashPresenter { private INetConnect iCconnect; private ISplashView iView; public SplashPresenter(ISplashView iView){ this.iView = iView; iCconnect = new INetConnectImpl(); } public void didFinishLoading(Context context){ iView.showProcessBar(); if(iCconnect.isNetConnect(context)){ iView.startNextActivity(); } else{ iView.showNetError(); } iView.hideProcessBar(); }}
最后看一下我们的Activity:
package com.example.mvp;import android.app.Activity;import android.app.ProgressDialog;import android.os.Bundle;import android.widget.Toast;import com.presenter.SplashPresenter;import com.view.ISplashView;/** * MVP设计模式,最适合Android开发,再也不用担心业务逻辑和UI纠缠的太深了。 * 我们的每个业务流程都可以用这个模型来表达,代码清晰可扩展。接口化为我们提供了约束,把UI操作和非UI操作隔离 * @author zhangshiming * */public class MainActivity extends Activity implements ISplashView{ /**负责根据Model接口获取数据,处理业务逻辑,并通过View来呈现。 我们的业务逻辑都写在这里**/ private SplashPresenter mPresenter; private ProgressDialog mProgressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout. activity_main); /**为ISplashView(更新UI)初始化具体实现类**/ mPresenter = new SplashPresenter(this); } @Override protected void onResume() { super.onResume(); /**执行我们的业务逻辑**/ mPresenter.didFinishLoading(this); } /** * 以下4个方法为ISplashView具体实现 */ @Override public void showProcessBar() { if (mProgressBar == null) { mProgressBar = new ProgressDialog( this); mProgressBar.setCancelable( true); mProgressBar.setCanceledOnTouchOutside( true); mProgressBar.setMessage( "更新数据中,请稍后" ); } mProgressBar.show(); } @Override public void hideProcessBar() { mProgressBar.hide(); } @Override public void showNetError() { Toast.makeText(this, "暂无网络", Toast.LENGTH_SHORT).show(); } @Override public void startNextActivity() { Toast.makeText(this, "跳到下个activity", Toast.LENGTH_SHORT).show(); }}
好了,MVP的思想就是定义一组和UI更新相关的接口,并用presenter做业务逻辑处理,业务逻辑处理的只依赖于我们定义的接口,并不依赖具体UI如何更新。
- Android MVP设计模式的理解
- 关于android的设计模式---MVP的个人理解
- Android--MVP设计模式的理解和总结
- Android----MVP模式的理解
- Android MVP模式的理解
- Android的MVP设计模式
- Android的设计模式MVP
- 理解MVP设计模式
- mvp设计模式的个人理解
- MVP 设计模式理解,实战理解MVP
- MVP 设计模式理解,实战理解MVP
- Android MVP设计的简单理解
- Android中的MVP模式的理解
- 理解中Android的MVP开发模式~
- Android MVP 设计模式
- Android: MVP设计模式
- Android MVP 设计模式
- MVP模式的理解
- 双线路由策略
- android添加背景音乐
- poi导出excel
- HZAU 1001 Handing Out Candies
- 使用HTML5本地储存localStorage
- Android MVP设计模式的理解
- JAVA敏捷开发环境搭建
- tsung
- Android Drawable Resources系列6:<transition>
- HZAUoj 1015: LCS
- Idea15下载Maven源码和文档
- 文章标题
- 理解JPA注解@GeneratedValue
- SharedPreferences工具类