IT评测·应用市场-qidao123.com技术社区

标题: 安卓MVVM架构--联合《第一行代码》SunnyWeather实战解说 [打印本页]

作者: 怀念夏天    时间: 2025-4-19 13:56
标题: 安卓MVVM架构--联合《第一行代码》SunnyWeather实战解说
没有架构之前的天下

早期没有 MVVM 的时候,ActivityFragment 里通常既负责 UI 展示,也直接进行数据获取,包括网络请求、数据库操作等。这种做法被称为 God Activity,导致了代码维护困难,常见题目包括:

        Activity/Fragment 既处置惩罚 UI,又负责业务逻辑和数据请求,导致代码量巨大,难以维护。

        在早期开发中,假如 Activity 旋转(横竖屏切换),onCreate() 会重新执行,导致数据丢失。
        需要手动管理 AsyncTask、Thread,否则会导致 内存走漏 或 瓦解。
.....
总结:没有架构的代码 -- 耦合度高、可读性、可扩展性、可测试性低

MVVM(Model - View - ViewModel)架构

各层简介

View层--仅负责 UI 界面和用户交互
ViewModel层 -- 存储和UI界面相关的数据(谷歌为支持这种架构提出了JetPack ViewModel,下文中请注意区分)
Model层 -- 负责数据的存储和获取,并进行业务逻辑的处置惩罚
图解

开发者文档中图片如下:

UILayer

界面层由以下两部分组成:

Data Layer

数据层(Data Layer)的重要职责是从不同的数据源(如网络请求、本地数据库、文件等)获取数据。

扩展:业务逻辑该在哪里做

假如是和UI界面相关的,比如简朴的表单数据格式验证、简朴数据的转换应该交给ViewModel做。
而存储数据的转换和账号暗码的服务器校验之类的业务逻辑应该交给Data Layer做。

项目实例

项目结构

联合上面的理论,给出项目的架构图。(泉源:《第一行代码》)

注意:只有上层才能拥有下层的引用,且不能跨层引用
为了搭配MVVM架构,谷歌的JetPack提供了ViewModel类,来帮我们简化代码。 这里不睁开先容,简朴说一下:
1、ViewModel类的生命周期是Activity创建到Activity销毁之后。
2、ViewModel类可以存储和Acticity界面相关的数据。
3、ViewModel类搭配谷歌提供的LiveData类,可以实现 监控变量 的效果,一样平常是UI界面的更新。

代码实例

下面的代码可以清晰的看出,上层是怎样使用下一层的。不要关注实现细节,关注架构(注释)就好。
[code]//1️⃣ View 层(UI 层)
class WeatherActivity : AppCompatActivity() {
    //这里是UI层对ViewModel层的引用
    val viewModel by lazy { ViewModelProvider(this).get(WeatherViewModel::class.java)}
   
    override fun onCreate(savedInstanceState: Bundle?) {
        ......
        //这里是viewMode中的LiveData提供的监测observe,这个数据变化时,UI界面会变化
        viewModel.weatherLiveData.observe(this , Observer{result->
            val weather = result.getOrNull()
            if(weather != null){
                showWeatherInfo(weather)
            }else{
                Toast.makeText(this,"无法成功获取天气信息",Toast.LENGTH_SHORT).show()
                result.exceptionOrNull()?.printStackTrace()
            }
        })
        
        ....
     }
  
//




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4