前言
由于 MVP、MVVM、组件化架构的兴起,MVC 架构在 android 中的应用变得越来越少,但 MVC 是基础,理解好 MVC 才能更好的理解 MVP,MVVM,因为后两种都是基于 MVC 发展而来的。
有些人认为只要架构好 App 就做得好,这种认识其实是错误的,架构的本质一定是服务于业务的。每一种架构一定有它的优点和缺点,能适合自己的需求、提高开发效率的架构就是一个好的架构。
例如一个功能相对比较简单并且后期也不再扩展的 App,完全可以用 MVC 架构来写,将逻辑全部写在 Activity 或者 Fragment 里,如果你用 MVP 这种架构,相应的你就要增加很多类,可能并不能提高你的开发效率。
Android 中 MVC 模式角色说明
在 Android 中项目中,MVC 中的 View 就是我们的 XML,而逻辑就是我们的 Activity 或者 Fragment 等类,他们的分工是明确的,布局就负责 UI,Activity 就负责逻辑,Model 负责数据的处理。
类型 | 定义 | 表现形式 |
---|---|---|
M(Model) | 模型层(数据存储、逻辑处理) | Model 类 |
V(View) | 视图层(UI 展示) | 布局文件、Activity |
C(Controller) | 控制层(逻辑处理) | Activity |
MVC 实例讲解
我相信 MVC 架构大家都知道,理论部分我就不讲那么多了,我们通过一个实例来讲解 MVC 架构的具体实现。
这个实例的整体功能非常简单,就是利用 Okhttp 请求一个 url,然后利用 Gson 解析数据,Glide 显示图片,RecyclerView 显示列表,实例效果如下所示,这里我使用的 API 是从干货集中营 上找的,API 是:https://gank.io/api/v2/data/category/Girl/type/Girl/page/2/count/10
创建实体类
通过接口返回的 Json 数据,我们就可以创建实体类了,我们可以手动写,也可以用工具直接生成,如果是用 Java 语言,我推荐用 GsonFormat,如果是用 Kotlin 语言,就用 JsonToKotlinClass 插件来自动生成,因为我是用 Kotlin 语言来写的,所以我就用 JsonToKotlinClass 来自动生成实体类代码,如下所示:
data class DataBean(
val data: List<Data>,
val page: Int,
val page_count: Int,
val status: Int,
val total_counts: Int
)
data class Data(
val _id: String,
val author: String,
val category: String,
val createdAt: String,
val desc: String,
val images: List<String>,
val likeCounts: Int,
val publishedAt: String,
val stars: Int,
val title: String,
val type: String,
val url: String,
val views: Int
)
创建 View 层
视图层就是我们的布局文件,代码很简单,就是一个全屏的 RecyclerView,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"