MVP架构和MVC开发的理解

MVC架构

 

 

• 模型层Model):我们针对业务模型,建立的数据结构和相关的类,就可以理解为ModelModel是与View无关,而与业务相关的。
• 视图层View):一般采用 XML 文件或者 Java 代码进行界面的描述,也可以使用JavaScript+HTML等方式作为View层。
• 控制层Controller):Android 的控制层通常在 ActivityFragment 或者由它们控制的其他业务类中。

 

缺点:

 

1. Activity并不是一个标准的MVC模式中的Controller,它的首要职责是加载应用的布局和初始化用户界面,接受并处理来自用户的操作请求,进而做出响应。随着界面及其逻辑的复杂度不断提升,Activity类的职责不断增加,以致变得庞大臃肿。
2.View层和Model层相互耦合,不易开发和维护。

 

MVP架构

        MVP的全称为Model-View-Presenter,Model提供数据,View负责显示,Controller/Presenter负责逻辑的处理。MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter(MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过Controller。

        在开发的时候,Model-提供数据,View负责UI,Presenter,负责处理逻辑,提供view需要的数据,各执其责,这样,各个模式,各个类,分工明确,可以清晰的,降低耦合,层级职责更明显,易于单元测试

mvp模式的简单理解

MVP模式呢,就是把Activity复杂的逻辑,拆分并分类,都有各个的职责,那么这样逻辑也清楚了,也利于维护,咱们就拿很乱的房间做比喻,房间东西少的话我们就能很快的找到自己想要的东西,那么东西多了,有放的比较乱,那么我们找起来是不是很费劲,如果把相应的东西摆到相应的位置那么,我们房间东西再多我们也能找到自己想要的东西,那如果项目还有新的需求我们也很容易的添加新的功能,我们也可以单独按照新的分类,分出一块添加到项目中,这样就有利于更新,维护我们的项目

        那么咱们简单实现一个MVP模式完成的项目。

首先我们写Model

public class DataModel {
    List<String> data = new ArrayList<>();
    ModelInterface mCallback;
    public DataModel(ModelInterface mCallback){
        this.mCallback = mCallback;
    }
    public void getData(){
        for (int i = 0; i < 100; i++) {
            data.add(i + "item");
        }
        mCallback.loadSuccess(data);
        new AsyncTask<String,Integer, List<String> >(){
             @Override
             protected List<String> doInBackground(String... strings) {
                 for (int i = 0; i < 100; i++) {
                     data.add(i + "item");
                 }
                 return data;
             }
             @Override
             protected void onPostExecute(List<String> list) {
                 super.onPostExecute(list);
                 mCallback.loadSuccess(list);
             }
         };
    }
}

数据封装好了,我们可以在Application 类初始化 让数据刚运行的时候就加载出来

public class MVPApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        new DataModel(new MvpPrenter()).getData();
    }
}

接口:成功操作数据,失败提示

public interface ModelInterface {

    void loadSuccess(List<String> data);
    void loadFailed();

}

Presenter处理逻辑提供数据

public class MvpPrenter implements ModelInterface {

    DataModel dataModel = new DataModel(this);
    MvpView mvpView ;
    public MvpPrenter(MvpView mvpView){
        this.mvpView = mvpView;
    }

    @RequiresApi(api = Build.VERSION_CODES.N)
    @Override
    public void loadSuccess(List<String> data) {
        mvpView.setListItem(data);
    }

    @Override
    public void loadFailed() {

    }
}

View的使用

public class MainActivity extends AppCompatActivity implements  MvpView{

    private MvpPrenter mvpPrenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mvpPrenter = new MvpPrenter(this);
    }

    @RequiresApi(api = Build.VERSION_CODES.N)
    @Override
    public void setListItem(List<String> data) {
        data.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
//                Log.i("loadSuccess",s);
            }
        });
    }
}

public interface MvpView {

    void setListItem(List<String> data);
}

 

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值