美文网首页
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