Android Studio项目重构:MVC/MVVM模式实现指导求助
从MVC模式入手,一步步重构你的Android项目
作为新手,MVC是比MVVM更易上手的架构,核心是把代码拆成三个职责明确的部分,下面是具体的实施步骤:
一、先搞懂MVC三个模块的核心职责
- Model层:只处理数据相关逻辑——比如网络请求、本地存储(SharedPreferences/数据库)、数据计算,完全不涉及任何界面操作(比如
findViewById、Toast) - View层:负责界面展示和用户交互——就是你的XML布局文件,加上Activity/Fragment里的控件初始化、数据显示、点击监听等纯界面操作
- Controller层:作为中间协调者(通常就是你的Activity/Fragment),接收View的用户事件,调用Model获取/处理数据,再把结果传给View显示
二、分步重构示例(以用户信息页面为例)
假设你之前把所有代码都堆在Activity里,现在一步步拆分:
1. 抽离Model层
新建UserModel类,把所有数据相关的逻辑移过去:
// UserModel.kt class UserModel { // 模拟网络请求获取用户信息(实际项目替换为Retrofit/OkHttp代码) fun getUserInfo(userId: String): User { return User(userId, "张三", "zhangsan@example.com") } // 模拟保存用户信息(实际项目替换为SharedPreferences/数据库代码) fun saveUserInfo(user: User) { // 这里写存储逻辑 } } // 纯数据类,只用来承载数据 data class User(val id: String, val name: String, val email: String)
2. 整理View+Controller层(原Activity)
Activity只保留界面相关代码,作为View和Controller的结合体:
// UserActivity.kt class UserActivity : AppCompatActivity() { private lateinit var tvUserName: TextView private lateinit var tvUserEmail: TextView private lateinit var btnSave: Button private lateinit var userModel: UserModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_user) initViews() initModel() loadAndShowUserInfo() } // 只负责初始化控件和设置监听 private fun initViews() { tvUserName = findViewById(R.id.tv_user_name) tvUserEmail = findViewById(R.id.tv_user_email) btnSave = findViewById(R.id.btn_save) // 用户点击事件交给Controller处理 btnSave.setOnClickListener { val updatedUser = User("1001", tvUserName.text.toString(), tvUserEmail.text.toString()) userModel.saveUserInfo(updatedUser) Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show() } } private fun initModel() { userModel = UserModel() } // Controller协调Model和View:从Model拿数据,传给View显示 private fun loadAndShowUserInfo() { val user = userModel.getUserInfo("1001") showUserInfo(user) } // 纯View操作:只负责把数据显示到界面 private fun showUserInfo(user: User) { tvUserName.text = user.name tvUserEmail.text = user.email } }
3. 迁移现有代码的实用技巧
- 小步拆分:不要一次性重构整个项目,先挑一个最简单的功能(比如用户信息展示、登录请求)拆分,跑通后再处理其他功能
- 边界清晰:迁移时严格遵循:只要是和数据有关的代码,就丢给Model;只要是和界面有关的,就留在View/Controller;Controller只做中间协调,不处理具体业务逻辑
- 测试验证:每拆分完一个模块,运行测试确保功能正常,避免一次性改太多导致bug
三、为什么推荐新手先学MVC?
相比MVVM需要学习ViewModel、LiveData、DataBinding等新组件,MVC不需要额外依赖,只用你已经熟悉的Activity/Fragment和普通类就能实现,上手门槛低,能快速体会到代码分层的好处。
内容的提问来源于stack exchange,提问作者harry powers
相关产品推荐
相关产品推荐

