美文网首页
MVC—架构解析

MVC—架构解析

作者: JackDaddy | 来源:发表于2023-09-30 16:41 被阅读0次

    一、前言

    由于 MVP、MVVM 的兴起,MVC 在 android 中的应用变得越来越少了,但 MVC 是基础,理解好 MVC 才能更好的理解MVP,MVVM。因为后两种都是基于 MVC 发展而来的。

    一、概论

    MVC架构是第一个应用于Android开发的成熟架构,由Model、View、Controller三部分组成,大致的设计图有以下几种:


    MVC架构

    到底上面列出的设计图哪个才是对的。其实都是对的。为什么这么说呢,这得从 MVC 的发展说起。 MVC 框架模式最早由 Trygve Reenskaug 于 1978 年在 Smalltalk-80 系统上首次提出。经过了这么多年的发展,当然会演变出不同的版本,但核心没变依旧还是三层模型 Model-View-Control。

    箭头 → 代表的是一种事件流向,并不一定要持有对方,比如上图中 model → view 的事件流向,view 可以通过注册监听器的形式得到 model 发来的事件。在设计中 model view controller 之间如果要通讯,尽量设计成不直接持有,这样方便复用。也符合mvc的设计初衷 在 Android 中三者对应的关系如下:

    MVC关系
    • 视图层(View) 对应于xml布局文件和java代码动态view部分。

    • 控制层(Controller) MVC中Android的控制层是由Activity来承担的,Activity本来主要是作为初始化页面,展示数据的操作,但是因为XML视图功能太弱,所以Activity既要负责视图的显示又要加入控制逻辑,承担的功能过多。

    • 模型层(Model) 针对业务模型,建立的数据结构和相关的类,它主要负责网络请求,数据库处理,I/O的操作。

    由于 Android 中有个 god object 的存在 activity,再加上 Android 中 xml 布局的功能性太弱,所以 activity承担了绝大部分的工作。所以在 Android 中 mvc 更像是这种形式:


    因为 activity 扮演了 controller 和 view 的工作,所以 controller 和 view 不太好彻底解耦,但是在一定程度上我们还是可以解耦的。下面我们通过代码来看下,mvc 在 Android 中的实现:

    前面说了 Activity 充当 View 和 Controller,但是我们依然要区分到底哪一部分是 View 的操作,哪一部分是 Controller 的操作。 我们分析下事件的流向。

    1. button 点击事件的触发:View→Controller
    2. 获取用户信息事件的触发:Controller→Model
    3. 绑定用户信息到View:Controller→View

    至此MVC就讲完了,我们这里根据 sample 来总结下:

    • 具有一定的分层,model 彻底解耦,controller 和 view 并没有解耦;
    • 层与层之间的交互尽量使用回调或者去使用消息机制去完成,尽量避免直接持有;
    • controller 和 view 在 android 中无法做到彻底分离,但在代码逻辑层面一定要分清;
    • 业务逻辑被放置在 model层,能够更好的复用和修改增加业务。
    优点:

    由于MVC很好的分离了视图层和业务层,所以它具有以下优点

    • 耦合性低
    • 开发速度快
    • 可维护性高
    • 易于理解
    缺点:
    • 由于MVC的设计思想是从Model出发,而没有考虑到View端的复杂性,这样导致的问题是Model难以符合复杂多变的View端变化。导致Model的作用很小,而很多View层的职责也转移到了Controller层。Controller变得臃肿不堪。耦合性也变高了。
    • 测试困难

    相关文章

      网友评论

          本文标题:MVC—架构解析

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