美文网首页
Android MVC模式

Android MVC模式

作者: code希必地 | 来源:发表于2020-11-25 22:58 被阅读0次

1、MVC简介

MVC是Model-View-Controller的简称,即模型层-视图层-控制层。按照这种设计我们可以将业务逻辑、视图显示以及数据层面的代码进行分离。下面说下MVC在Android中对应的角色:

  • M:Model(模型层),是程序中处理数据的部分,比如对数据库的操作或者网络请求。
  • V:View(视图层),对应程序中的XML文件或自定义控件,主要是视图的显示。
  • C:Controller(控制层),对应应用程序中的Activity、Fragment或Adapter。主要处理用户交互部分,接收用户事件调用Model获取数据,然后返回给View进行展示。
    MVC简单来说通过Controller来操作Model层的数据并返回给View展示。


    mvc.png

2、MVC在Android的使用

下面我们使用MVC来完成一个简单的登录功能。

Model层

/**
 * Model层 数据处理
 */
class LoginModel {

    fun login(userName: String, pwd: String, callBack: DataCallBack<AccountInfo>) {
        Handler().postDelayed({
            val isSuccess = Random.nextBoolean()
            if (isSuccess) {
                callBack.onSuccess(AccountInfo(userName, pwd))
            } else
                callBack.onFailure()
        }, 2000)
    }
}

Controller层

/**
 * Controller层
 */
class LoginActivity : AppCompatActivity() {
    private lateinit var model: LoginModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)
        model = LoginModel()
        btn_login.setOnClickListener {
            val userName = getUserName()
            val pwd = getPwd()
            login(userName, pwd)
        }
    }


    /**
     * 处理用户点击 调用Model中的登录接口,并通过注册监听的方式
     * 来实现Model和View的通信
     */
    private fun login(userName: String, pwd: String) {
        model.login(userName, pwd, object : DataCallBack<AccountInfo> {
            override fun onSuccess(t: AccountInfo) {
                showSuccessView()
            }

            override fun onFailure() {
                showFailView()
            }

        })
    }

    /**
     * 以下几个方法是对View的操作
     */
    /**
     * 获取输入的用户
     */
    private fun getUserName(): String {
        return et_username.text.toString()
    }

    /**
     * 获取输入的密码
     */
    private fun getPwd(): String {
        return et_pwd.text.toString()
    }

    /**
     * 显示登陆成功的界面
     */
    private fun showSuccessView() {
        tv_result.text = "登陆成功"
    }

    /**
     * 显示登陆失败的界面
     */
    private fun showFailView() {
        tv_result.text = "登陆失败"
    }
}

从上面代码可以看出:

    1. 由于XML文件视图功能较弱,所以Activity不得不承担视图的工作,Activity不是一个标准的Controller,它的首要工作是初始化界面,在其中还需要处理业务逻辑,调用Model获取数据以及View视图的展示。随着业务逻辑的复杂性提高,Activity必然越来越臃肿。
    1. MVC只能说一定程度上对Model和View进行了分离,View和Model依然可以直接通信,并没有做到View和Model的解耦。
    1. Controller和View耦合严重,很难做到复用。
      可见MVC还是存在很多问题的,这也是MVP出现的原因,MVP很好的解决了这些问题。

相关文章

网友评论

      本文标题:Android MVC模式

      本文链接:https://www.haomeiwen.com/subject/omrniktx.html