Android MVC框架

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

文章目录

  • 前言
  • 一、MVC是什么?
  • 二、写个简单的例子
    • 1.bean
    • 2.callback
    • 3.interfaces
    • 4.model
    • 5.ui
  • 优缺点
  • 总结


前言

提示:很多教程讲解框架感觉都像说天书一堆理论。学习的东西没用成为武器库反而成了累赘。mvc框架的作用其实就是把Activity里的网络请求、数据库存取操作\复杂的算法,耗时的任务等,把一堆东西拆分出来不要什么都放Activity里,好处是有利于维护,当然你感觉不需要我能看懂自己代码维护自己也没问题那么你可以不用。有时候为了使用而使用反而南辕北辙了,当然你可以不用但不能不会


提示:以下是本篇文章正文内容,下面案例可供参考

一、MVC是什么?

示例:MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种框架模式。

二、写个简单的例子

1.bean

代码如下(示例):


/**
 * @description:
 * @author: 黄剑桥
 * @email: [email protected]
 * @date :   2021/6/23 20:24
 */
public class CangTouShiBean {

    /**
     * message : 发布任务
     * code : 200
     * data : {"task":4,"software":1,"inputContent":"五一七天了建设科技的"}
     */

    private String message;
    private int code;
    /**
     * task : 4
     * software : 1
     * inputContent : 五一七天了建设科技的
     */

    private DataBean data;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public DataBean getData() {
        return data;
    }

    public void setData(DataBean data) {
        this.data = data;
    }

    public static class DataBean {
        private int task;
        private int software;
        private String inputContent;

        public int getTask() {
            return task;
        }

        public void setTask(int task) {
            this.task = task;
        }

        public int getSoftware() {
            return software;
        }

        public void setSoftware(int software) {
            this.software = software;
        }

        public String getInputContent() {
            return inputContent;
        }

        public void setInputContent(String inputContent) {
            this.inputContent = inputContent;
        }
    }
}

2.callback

/**
 * @description: 参考地址  https://www.cnblogs.com/Claire6649/p/6091061.html
 * @author: 黄剑桥
 * @email: [email protected]
 * @date :   2021/6/23 20:22
 */
public interface BeanCallback<T> {
    /**
     * 失败
     * @param msg 请求消息
     */
    void onError(String msg);
    /**
     * 请求成功
     * @param t
     */
    void onSuccess(T t);
}

3.interfaces

/**
 * @description:
 * @author: 黄剑桥
 * @email: [email protected]
 * @date :   2021/6/23 20:23
 */
public interface ICangTouShi {
    /**
     * 请求数据,需要有变化的参数
     * @param num 参数
     * @param type
     * @param yayuntype
     * @param key
     * @param callback
     */
   void doRequest(String num, String type, String yayuntype, String key, BeanCallback<CangTouShiBean> callback);

}

4.model

/**
 * @description:M层:适合做一些业务逻辑处理,比如数据库存取操作,网络操作,复杂的算法,耗时的任务等都在model层处理。
 * @author: 黄剑桥
 * @email: [email protected]
 * @date :   2021/6/23 20:59
 */
public class CangTouShiModel implements ICangTouShi {
    @Override
    public void doRequest(String num, String type, String yayuntype, String key, BeanCallback<CangTouShiBean> callback) {
        OkHttpClient client = new OkHttpClient();
        RequestBody body = new FormBody.Builder()
                .add("showapi_sign", "150e9206e7f542bab4affe49d73cb920")
                .add("num", num)
                .add("type", type)
                .add("yayuntype", yayuntype)
                .add("key", key).build();
        Request request = new Request.Builder()
                .post(body)
                .url("http://192.168.1.217:8080/a/task3.json").build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                callback.onError(e.getMessage());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String json = response.body().string();
                Gson gson = new Gson();
                CangTouShiBean shiBean = gson.fromJson(json, CangTouShiBean.class);
                callback.onSuccess(shiBean);
            }
        });
    }
}

5.ui

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.example.mvc.R;
import com.example.mvc.bean.CangTouShiBean;
import com.example.mvc.callback.BeanCallback;
import com.example.mvc.model.CangTouShiModel;

/**
 * V层:应用层中处理数据显示的部分,XML布局可以视为V层,显示Model层的数据结果。
 * 

* C层:在Android中,Activity处理用户交互问题,因此可以认为Activity是控制器, * Activity读取V视图层的数据(eg.读取当前EditText控件的数据) * 控制用户输入(eg.EditText控件数据的输入) * ,并向Model发送数据请求(eg.发起网络请求等)。 */ public class MVCActivity extends AppCompatActivity { private TextView tv; private Button bt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); //逻辑部分 registerListener(); } private void registerListener() { bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { CangTouShiModel model = new CangTouShiModel(); model.doRequest("num", "type", "ya", "key", new BeanCallback<CangTouShiBean>() { @Override public void onError(String msg) { runOnUiThread(new Runnable() { @Override public void run() { tv.setText("msg" + msg); } }); } @Override public void onSuccess(CangTouShiBean cangTouShiBean) { runOnUiThread(new Runnable() { @Override public void run() { tv.setText(cangTouShiBean.getData().getInputContent()); } }); } }); } }); } private void initView() { tv = (TextView) findViewById(R.id.test_tv); bt = (Button) findViewById(R.id.test_bt); } }

Android MVC框架_第1张图片


优缺点

Android MVC框架_第2张图片

Android中使用了Activity来充当Controller,但实际上一些UI也是由Activity来控制的,比如进度条等。因此部分视图就会跟Controller捆绑在同一个类了。同时,由于Activity的职责过大,Activity类的代码也会迅速膨胀。
MVC还有一个重要的缺陷就是View跟Model是有交互的,没有做到完全的分离,这就会产生耦合。

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了mvc的使用,而mvc提供了大量能使我们快速便捷地处理维护。

你可能感兴趣的:(mvc,android,java)