Trae搭建Android 开发中 MVVM 架构,使用指南:组件、步骤与最佳实践

MVVM架构使用说明

概述

MVVM(Model-View-ViewModel)是一种软件架构模式,有助于将用户界面(View)的开发与业务逻辑或后端逻辑(Model)的开发分离。在Android开发中,MVVM架构可以提高代码的可维护性、可测试性和可扩展性。

组件说明

View层

View层负责显示数据和处理用户交互。在Android中,View层通常由Activity、Fragment和布局文件组成。

职责:

  • 发送用户操作到ViewModel
  • 观察ViewModel中的LiveData变化并更新UI
  • 不直接访问Model层

ViewModel层

ViewModel是连接View和Model的桥梁,负责处理UI相关的数据和逻辑。

职责:

  • 准备和管理UI数据
  • 处理用户交互逻辑
  • 与Repository通信获取数据
  • 不直接访问View层
  • 生命周期感知,避免内存泄漏

Model层

Model层负责数据处理和业务逻辑。

职责:

  • 数据获取(网络、数据库等)
  • 数据处理和转换
  • 业务逻辑实现

使用步骤

1. 创建Model

创建数据模型类和数据访问对象(DAO):

kotlin 复制代码
data class User(
    val id: Int,
    val name: String,
    val email: String
)

@Dao
interface UserDao {
    @Query("SELECT * FROM users")
    fun getAllUsers(): List<User>
    
    @Insert
    fun insertUser(user: User)
}

2. 创建Repository

创建Repository类来管理数据源:

kotlin 复制代码
class UserRepository {
    private val userDao = AppDatabase.getDatabase().userDao()
    
    fun getUsers(): LiveData<List<User>> {
        return userDao.getAllUsers()
    }
    
    fun addUser(user: User) {
        // 在IO线程中执行数据库操作
        viewModelScope.launch(Dispatchers.IO) {
            userDao.insertUser(user)
        }
    }
}

3. 创建ViewModel

创建ViewModel类来处理UI逻辑:

kotlin 复制代码
class UserViewModel(application: Application) : AndroidViewModel(application) {
    private val repository = UserRepository()
    
    val users = repository.getUsers()
    
    fun addUser(user: User) {
        repository.addUser(user)
    }
}

4. 在Activity/Fragment中使用

在Activity或Fragment中观察ViewModel中的LiveData并更新UI:

kotlin 复制代码
class UserListActivity : AppCompatActivity() {
    private lateinit var binding: ActivityUserListBinding
    private lateinit var adapter: UserAdapter
    private val viewModel: UserViewModel by viewModels()
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityUserListBinding.inflate(layoutInflater)
        setContentView(binding.root)
        
        setupRecyclerView()
        observeViewModel()
    }
    
    private fun setupRecyclerView() {
        adapter = UserAdapter()
        binding.recyclerView.layoutManager = LinearLayoutManager(this)
        binding.recyclerView.adapter = adapter
    }
    
    private fun observeViewModel() {
        viewModel.users.observe(this) { users ->
            adapter.setUsers(users)
        }
    }
}

示例

项目结构

bash 复制代码
cn.harry.smartcabinet
├── model          # 数据模型和DAO
├── view           # Activity、Fragment和适配器
├── viewmodel      # ViewModel类
├── repository     # 数据仓库
├── database       # Room数据库
└── utils          # 工具类和扩展函数

最佳实践

  1. 避免在ViewModel中引用View:ViewModel不应持有Activity或Fragment的引用,以避免内存泄漏。

  2. 使用LiveData或StateFlow:使用LiveData或StateFlow在ViewModel和View之间传递数据。

  3. 生命周期感知:利用LiveData的生命周期感知特性,避免在View处于非活跃状态时更新UI。

  4. 数据绑定:使用Android数据绑定库简化UI更新。

  5. 协程处理异步操作:在ViewModel中使用Kotlin协程处理异步操作。

  6. 单一数据源:确保数据只有一个来源,避免数据不一致。

注意事项

  1. 内存泄漏:确保正确使用生命周期感知组件,避免内存泄漏。

  2. 配置变更:ViewModel会在配置变更(如屏幕旋转)时保留,确保数据不会丢失。

  3. 测试:ViewModel的独立性使其更容易进行单元测试。

通过遵循这些指导原则,您可以有效地在Android项目中实现和使用MVVM架构模式。

相关推荐
Kapaseker3 小时前
一杯美式搞懂 Any、Unit、Nothing
android·kotlin
黄林晴3 小时前
你的 Android App 还没接 AI?Gemini API 接入全攻略
android
恋猫de小郭13 小时前
2026 Flutter VS React Native ,同时在 AI 时代 VS Native 开发,你没见过的版本
android·前端·flutter
冬奇Lab14 小时前
PowerManagerService(上):电源状态与WakeLock管理
android·源码阅读
BoomHe19 小时前
Now in Android 架构模式全面分析
android·android jetpack
二流小码农1 天前
鸿蒙开发:上传一张参考图片便可实现页面功能
android·ios·harmonyos
鹏程十八少1 天前
4.Android 30分钟手写一个简单版shadow, 从零理解shadow插件化零反射插件化原理
android·前端·面试
Kapaseker1 天前
一杯美式搞定 Kotlin 空安全
android·kotlin
三少爷的鞋1 天前
Android 协程时代,Handler 应该退休了吗?
android
火柴就是我2 天前
让我们实现一个更好看的内部阴影按钮
android·flutter