Android结构模式的主要区别(MVC)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

Android中的项目结构主要有MVC,MVP,MVVM,原始级别的MVC演变出来后两种,每种模式都各有优缺点,每一种模式的目的都是为了让业务逻辑更清晰,代码分离降低耦合度,方便长期的快捷维护,由于现在公司的项目比较old,还是原始的MVC模式,部分业务使用MVP模式,由于快速的迭代业务,部分代码甚至已经脱离模式,所以有必要重新整理下;

一、MVC简述

MVC(Model–View–Controller):即是模型(model)-视图(view)-控 制器(controller),后两种的演变都是基于此的发展。M层处理数据逻辑,V层显示结果,C层控制V和M的通信已到达分离的效果。对应到Android中View层一般指xml布局文件或者js+Html的方式,在activity中可以通过id获取布局控件的引用,C层通常指Activity协同V和M层处理业务逻辑,M层是指业务相关的数据结构和类,处理数据的请求,读写数据库等一些操作。
实现一个简单的MVC实例:
项目结构图
创建一个Android项目,项目结构如上图所示,httpUtil用于网络请求,DemoMainModel实现了BaseModel基类,BM中添加了一些在控制层(Activity、Fragment)公用的操作,
DemoMainModel类
DemoMainModel中对数据请求并做处理,将数据返回给C。

  MainActivity 中代码如下:
public class MainActivity extends AppCompatActivity {

    private Button bt;
    private TextView tvShow;
    private DemoMainModel mainModel;
    private UserInfo currentUserInfo;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mainModel = new DemoMainModel();
        initView();
    }

    private void initView() {
        bt = findViewById(R.id.bt_get);

        tvShow = findViewById(R.id.tv_show);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mainModel.getUserInfo(101, new CallBack<UserInfo>() {
                    @Override
                    public void callBack(UserInfo userInfo) {
                        updateView();
                    }
                });
            }
        });
    }


    private void updateView(){
        if(currentUserInfo!=null){
            tvShow.setText("Name:"+currentUserInfo.getName()+"Age:"+currentInfo.getAge());
        }
    }
}

在Activity中持有Model的引用,数据的请求处理被分离出来,而且如果业务过多,activity中的方法数量会过于繁多,也难以管理,达到非常臃肿的地步更加难以优化,因为涉及的业务逻辑太多,ac同时操作model和view,但对于Activity而言View层是无法分离的。

MVC总结

上述的过程是被动模式,Controller是唯一操作Model的类. 基于用户的响应事件, Controller通知Model更新数据. 在Model更新后, Controller通知View更新UI, View从Model中获取数据.对于主动模式而言,观察者模式可以做到多视图同时更新,Controller不是唯一操作Model的类, Model存在自更新机制. 在更新数据时, Model层使用观察者(Observer)模式通知View和其他类. View实现观察者的接口, 在Model中, 注册成为观察者, 接收通知.view和activity无法分离,UI的处理逻辑耦合,简单的说这种模式的问题就是activity中的代码量会越来越多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值