更加简洁的代码从MVC到MVP

  1. MVC 编程模式编辑
    MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:
    Model(模型)表示应用程序核心(比如数据库记录列表)。
    View(视图)显示数据(数据库记录)。
    Controller(控制器)处理输入(写入数据库记录)。
    Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
      通常模型对象负责在数据库中存取数据。
    View(视图)是应用程序中处理数据显示的部分。
      通常视图是依据模型数据创建的。
    Controller(控制器)是应用程序中处理用户交互的部分。
      通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
    2.MVC在android中的使用和体现
    在android开发中我们本身都是基于mvc进行编程,有人说android就是写界面和展示数据,在开发中
    我们会发现不是写布局就是访问网路拿数据。在基于MVC的模式编程时候我们会发现,我们的activity会变的异常庞大,因为他控制着所有的数据逻辑和界面的ui显示,在逻辑复杂的类中我们会发现activity变得特别臃肿。那么MVP很好的解决了这个问题下来我们了解一下MVP。
    3.什么是MVP如何在项目中使用MVP
    说白了MVP中的P是对activity的业务的解耦和分类。present中做所有的逻辑操作而activity只做页面和数据的展示。闲话一大堆开始写代码体现一下MVP的结构和MVC的区别,和MVP的优势。
    4.MVP代码架构书写,在此demo中只是结构逻辑展示
    首先。定义一个公共的接口比如该模块为foot相关的模块。
    /
    • Description:
    • Copyright : Copyright (c) 2016
    • Author : hehe
    • Date : 2016/8/20 21:19
    • 业务模块的接口
    • 该接口中有两个子接口
    • Ui接口中定义Ui的相关方法。
    • Present接口定义逻辑数据相关的方法
      */
      public interface BadBoy {
      interface BadBoyUi{
      void showProgress(); //显示加载中的ui
      void hideProgress(); //隐藏加载中的ui
      }
      interface BadBoyPresent{
      void LodeData(); //加载数据的方法
      String getData(); //获取数据的方法
      }
      }**

下来是具体的逻辑管理类
/
* Description:
* Copyright : Copyright (c) 2016
* Author : hehe
* Date : 2016/8/20 21:30
*/
public class PresentBadBoy implements BadBoy.BadBoyPresent {
private BadBoy.BadBoyUi mBadActivty;
private String data;
public PresentBadBoy(BadBoy.BadBoyUi mBadActivty){
this.mBadActivty = mBadActivty;
}
@Override
public void LodeData() {
mBadActivty.showProgress();
OkHttpUtils.Loading(“url”, new OkHttpUtils.callBack() {
@Override
public void lodeerror(String code) {
mBadActivty.hideProgress();//对错误信息没有相应的处理,只是一个demo展示
}
@Override
public void lodeSuccess(String data) {
mBadActivty.hideProgress();
setData(data);
}
});
}
@Override
public String getData() {
return data;
}
public void setData(String data){
this.data = data;
}
}**
再下来是看activty中的代码展示是不少了一些,也许代码太简单,在项目中如果逻辑相当复杂那么你就会很明显的感到mvp的优势
**public class MainActivity extends AppCompatActivity implements BadBoy.BadBoyUi{
private PresentBadBoy mPresentBadBoy;
private ProgressBar mPro;
private TextView mText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPresentBadBoy = new PresentBadBoy(this);//注册当前activty到控制类中
initView();
initData();
}
private void initData() {
mPresentBadBoy.LodeData();
String data = mPresentBadBoy.getData();
if (data!= null) {
mText.setText(data);
} else {
mText.setText(“网络访问失败”);
}
}
private void initView() {
mPro = (ProgressBar) findViewById(R.id.progress);
mText = (TextView) findViewById(R.id.tv_text);
}
@Override
public void showProgress() {
mPro.setVisibility(View.VISIBLE);
}
@Override
public void hideProgress() {
mPro.setVisibility(View.GONE);
}
}**
5.结语
这里只是简单的理解展示,在使用mvp的时候要注意Activity可能会导致内存 的泄漏问题,因为其中持有引用,应该在销毁当前Activity时候将这个绑定解除,这个大家自己实现吧,第一次写求批评指正,希望与大家共享技术带来的快乐。欢迎大神指点。

你可能感兴趣的:(android)