网易首页 > 网易号 > 正文 申请入驻

[温故而知新]Android架构模式

0
分享至

Android项目工程中常用的架构模式有MVC, MVP, MVVM以及现在新出的MVI。

下面一起温故而知新。

MVC

MVC(Model-View-Controller)是一种在Android应用程序中使用的架构模式,用于实现松耦合、可测试和可维护的应用程序。

MVC架构模式包括三个主要组件:Model(模型)、View(视图)和Controller(控制器)。


  • Model表示应用程序的数据和业务逻辑。它可以是数据库、网络请求或其他数据源。



  • View负责渲染UI,并与用户进行交互。它将用户的操作转发给Controller,并通过观察Model中的数据来更新UI。



  • Controller是View和Model之间的中间层。它从Model中获取数据,并将数据转换为View可以使用的格式。Controller还包含与用户交互相关的逻辑,并将用户的操作转发给Model。


以下是使用Kotlin在Android中实现MVC模式的示例代码:

// Model
data class User(val name: String, val age: Int)

// View
class MainActivity : AppCompatActivity() {
private lateinit var nameTextView: TextView
private lateinit var ageTextView: TextView

private lateinit var controller: MainController

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

nameTextView = findViewById(R.id.name_text_view)
ageTextView = findViewById(R.id.age_text_view)

controller = MainController()

// Trigger an action in the Controller
button.setOnClickListener {
controller.loadUser()
}
}

fun showUser(user: User) {
nameTextView.text = user.name
ageTextView.text = user.age.toString()
}
}

// Controller
class MainController {
fun loadUser() {
// Perform some business logic or data manipulation
val user = User("John Doe", 30)

// Update the View
(context as MainActivity).showUser(user)
}
}

MVC模式通过将业务逻辑从View中分离出来,使得代码更易于测试和维护。它通过控制器来协调View和Model之间的交互,实现了解耦。

请注意,MVC模式需要对控制器和回调有一定的了解。它适用于中大型应用程序,特别是需要处理大量数据和复杂业务逻辑的应用程序。

MVP

MVP(Model-View-Presenter)是一种在Android应用程序中使用的架构模式,用于实现松耦合、可测试和可维护的应用程序。

MVP架构模式包括三个主要组件:Model(模型)、View(视图)和Presenter(展示者)。


  • Model表示应用程序的数据和业务逻辑。它可以是数据库、网络请求或其他数据源。



  • View负责渲染UI,并与用户进行交互。它将用户的操作转发给Presenter,并通过观察Presenter中的数据来更新UI。



  • Presenter是View和Model之间的中间层。它从Model中获取数据,并将数据转换为View可以使用的格式。Presenter还包含与用户交互相关的逻辑,并将用户的操作转发给Model。


以下是使用Kotlin在Android中实现MVP模式的示例代码:

// Model
data class User(val name: String, val age: Int)

// View
interface MainView {
fun showUser(user: User)
}

class MainActivity : AppCompatActivity(), MainView {
private lateinit var nameTextView: TextView
private lateinit var ageTextView: TextView

private lateinit var presenter: MainPresenter

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

nameTextView = findViewById(R.id.name_text_view)
ageTextView = findViewById(R.id.age_text_view)

presenter = MainPresenter(this)

// Trigger an action in the Presenter
button.setOnClickListener {
presenter.loadUser()
}
}

override fun showUser(user: User) {
nameTextView.text = user.name
ageTextView.text = user.age.toString()
}
}

// Presenter
class MainPresenter(private val view: MainView) {
fun loadUser() {
// Perform some business logic or data manipulation
val user = User("John Doe", 30)

// Update the View
view.showUser(user)
}
}

MVP模式通过将业务逻辑从View中分离出来,使得代码更易于测试和维护。它通过接口实现了View和Presenter之间的解耦,使得它们可以独立开发和测试。

请注意,MVP模式需要对接口和回调有一定的了解。它适用于中大型应用程序,特别是需要处理大量数据和复杂业务逻辑的应用程序。

MVVM

MVVM(Model-View-ViewModel)是一种在Android应用程序中使用的架构模式,用于实现松耦合、可测试和可维护的应用程序。

MVVM架构模式包括三个主要组件:Model(模型)、View(视图)和ViewModel(视图模型)。


  • Model表示应用程序的数据和业务逻辑。它可以是数据库、网络请求或其他数据源。



  • View负责渲染UI,并与用户进行交互。它通过观察ViewModel中的数据来更新UI,并将用户的操作转发给ViewModel。



  • ViewModel是View和Model之间的中间层。它从Model中获取数据,并将数据转换为View可以使用的格式。ViewModel还包含与用户交互相关的逻辑,并将用户的操作转发给Model。


以下是使用Kotlin在Android中实现MVVM模式的示例代码:

// Model
data class User(val name: String, val age: Int)

// View
class MainActivity : AppCompatActivity() {
private lateinit var nameTextView: TextView
private lateinit var ageTextView: TextView

private val viewModel: ViewModel by viewModels()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

nameTextView = findViewById(R.id.name_text_view)
ageTextView = findViewById(R.id.age_text_view)

// Observe data changes and update UI
viewModel.user.observe(this) { user ->
nameTextView.text = user.name
ageTextView.text = user.age.toString()
}

// Trigger an action in the ViewModel
button.setOnClickListener {
viewModel.updateUser()
}
}
}

// ViewModel
class ViewModel : ViewModel() {
private val _user = MutableLiveData()
val user: LiveData = _user

fun updateUser() {
// Perform some business logic or data manipulation
val updatedUser = User("John Doe", 30)

// Update the LiveData
_user.value = updatedUser
}
}

MVVM模式通过将业务逻辑从View中分离出来,使得代码更易于测试和维护。它还支持数据绑定和双向绑定,使得UI的更新更加方便。

请注意,MVVM模式需要对观察者模式和数据绑定有一定的了解。它适用于中大型应用程序,特别是需要处理大量数据和复杂业务逻辑的应用程序。

MVI

MVI(Model-View-Intent)是一种在Android应用程序中使用的架构模式,用于构建响应式和可扩展的应用程序。

MVI架构模式包括三个主要组件:Model(模型)、View(视图)和Intent(意图)。

  • Model表示应用程序的状态,是一个不可变的数据结构,保存了渲染UI所需的所有信息。

  • View负责渲染UI,从Model接收状态并相应地更新UI。

  • Intent表示用户执行操作的意图,触发Model中的状态变化。

MVI模式的数据流是单向的,从Model到View。View不能直接修改状态,而是通过发送Intent到Model来更新状态并将其发送回View。

以下是使用Kotlin在Android中实现MVI模式的示例代码:

// Model
data class State(val count: Int)

// View
class MainActivity : AppCompatActivity() {
private lateinit var textView: TextView

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

textView = findViewById(R.id.text_view)

// Observe state changes and update UI
viewModel.state.observe(this) { state ->
textView.text = state.count.toString()
}

// Send an Intent to the ViewModel
button.setOnClickListener {
viewModel.processIntent(Intent.Increment)
}
}
}

// Intent
sealed class Intent {
object Increment : Intent()
}

// ViewModel
class ViewModel : ViewModel() {
private val _state = MutableLiveData()
val state: LiveData = _state

fun processIntent(intent: Intent) {
when (intent) {
is Intent.Increment -> {
val currentState = _state.value ?: State(0)
val newState = currentState.copy(count = currentState.count + 1)
_state.value = newState
}
}
}
}

请注意,MVI模式需要对响应式编程和函数式编程概念有很好的理解。对于小型或简单的应用程序,不建议使用MVI,因为它可能会增加不必要的复杂性。

没有银弹

在Android项目中,选择架构模式的最佳实践取决于项目的规模和需求。

以下是一些常见的最佳实践:


  • 对于小型或简单的应用程序,可以选择使用MVC(Model-View-Controller)模式。它将应用程序分为三个组件:Model、View和Controller。Model负责数据和业务逻辑,View负责渲染UI,Controller负责协调View和Model之间的交互。



  • 对于中大型应用程序,可以选择使用MVP(Model-View-Presenter)或MVVM(Model-View-ViewModel)模式。MVP模式通过Presenter来协调View和Model之间的交互,而MVVM模式通过ViewModel来实现数据绑定和双向绑定。



  • 如果应用程序需要处理大量数据和复杂业务逻辑,可以选择使用MVI(Model-View-Intent)模式。MVI模式通过单向数据流和响应式编程的概念来构建可扩展和可测试的应用程序。


请根据项目的规模和需求选择适合的架构模式,并根据需要进行适当的调整和定制。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
新疆小伙Cos耶稣火出圈!一言不合就戴荆棘冠,连线老外当场懵圈

新疆小伙Cos耶稣火出圈!一言不合就戴荆棘冠,连线老外当场懵圈

大又元
2026-06-23 18:08:03
阿尔及利亚2比1约旦,“救赎之战”完成逆转掌握出线主动权

阿尔及利亚2比1约旦,“救赎之战”完成逆转掌握出线主动权

澎湃新闻
2026-06-23 13:02:28
成都舞厅最新通告,严禁剪刀手!部分舞吧仅10元,退休群体享特惠

成都舞厅最新通告,严禁剪刀手!部分舞吧仅10元,退休群体享特惠

火山詩话
2026-06-23 17:28:47
哈兰德:小组出线已经很棒,赢下世界杯不现实

哈兰德:小组出线已经很棒,赢下世界杯不现实

体坛周报
2026-06-23 15:22:24
“顺德渔村”避雨事件反转,宝妈带1岁多孩子图方便不想挪电动车

“顺德渔村”避雨事件反转,宝妈带1岁多孩子图方便不想挪电动车

九方鱼论
2026-06-23 07:02:35
广德车祸家属称两小孩已经去世,肇事女司机被带走时都快哭了

广德车祸家属称两小孩已经去世,肇事女司机被带走时都快哭了

映射生活的身影
2026-06-23 16:28:07
国少主力被群殴!打人者染黄毛叼香烟+坐飞机逃走 董路:经验丰富

国少主力被群殴!打人者染黄毛叼香烟+坐飞机逃走 董路:经验丰富

念洲
2026-06-23 13:30:01
车主称踩下刹车,特斯拉反而加速,路口“飙到110km/h”:保险还没生效就撞报废了;特斯拉方回复:事发前没有发现制动系统异常

车主称踩下刹车,特斯拉反而加速,路口“飙到110km/h”:保险还没生效就撞报废了;特斯拉方回复:事发前没有发现制动系统异常

极目新闻
2026-06-23 13:25:20
联合国调查委员会:以色列在加沙故意针对儿童实施种族灭绝行为

联合国调查委员会:以色列在加沙故意针对儿童实施种族灭绝行为

西游日记
2026-06-23 20:03:28
项立刚:EUV光刻机,中国不仅可以做出来,还会把它搞成白菜价

项立刚:EUV光刻机,中国不仅可以做出来,还会把它搞成白菜价

混沌录
2026-06-22 17:48:16
终于有经济学家批评体制内退休金太高、加剧代际矛盾,评论区炸锅

终于有经济学家批评体制内退休金太高、加剧代际矛盾,评论区炸锅

慧翔百科
2026-06-23 08:47:02
一场3-2,让世界杯I组头名变烫手山芋!法国两难,拿第2比第1更好

一场3-2,让世界杯I组头名变烫手山芋!法国两难,拿第2比第1更好

侃球熊弟
2026-06-23 10:00:19
达成了!重磅3方大交易!篮网彻底告别里夫斯

达成了!重磅3方大交易!篮网彻底告别里夫斯

篮球实战宝典
2026-06-23 14:56:53
金靴争夺白热化!3人进球4+,72年第一次,压力给到凯恩C罗

金靴争夺白热化!3人进球4+,72年第一次,压力给到凯恩C罗

奥拜尔
2026-06-23 10:40:22
一觉醒来,美股7巨头崩了5个

一觉醒来,美股7巨头崩了5个

贩财局
2026-06-23 09:16:46
火出圈!哈兰德世界杯“偷喝”对手门将水 带头划船庆祝太燃

火出圈!哈兰德世界杯“偷喝”对手门将水 带头划船庆祝太燃

醉卧浮生
2026-06-23 11:30:44
3岁幼儿凌晨暴雨里找送外卖的妈妈,他们看到的,居然是暖心?

3岁幼儿凌晨暴雨里找送外卖的妈妈,他们看到的,居然是暖心?

走读新生
2026-06-22 00:10:37
东风-17亮剑,31国全安静了?中国这一手,藏着2个没说破的警告

东风-17亮剑,31国全安静了?中国这一手,藏着2个没说破的警告

李健政观察
2026-06-22 17:20:15
比亚迪官宣:6月23日,新车正式上市!

比亚迪官宣:6月23日,新车正式上市!

科技堡垒
2026-06-23 10:00:46
北约突发声明!宣布部署新核弹,普京被逼到墙角

北约突发声明!宣布部署新核弹,普京被逼到墙角

夜里看海
2026-06-23 01:33:51
2026-06-23 20:19:00
君伟说
君伟说
分享职场故事
453文章数 48关注度
往期回顾 全部

科技要闻

48名中国开发者联名举报苹果

头条要闻

河南南阳曾47天查扣24辆冷链货车:拍卖350万上缴国库

头条要闻

河南南阳曾47天查扣24辆冷链货车:拍卖350万上缴国库

体育要闻

扬尼斯去了迈阿密:凯尔特人怎么办?

娱乐要闻

内娱95后顶流格局发生潜移默化的变化

财经要闻

屋顶光伏度苦夏

汽车要闻

华为智驾ADS限时优惠月底结束 7月1日前下订立省3000元

态度原创

旅游
教育
艺术
亲子
军事航空

旅游要闻

虎牙联合首旅旅行在湖南洪江举办“龙标挚友杯”电竞嘉年华 探索“电竞+文旅”县域新模式

教育要闻

TTS新传考研名词解释:算法抵抗

艺术要闻

鲁迅毕生珍藏的书法!这才是楷书的“最初样貌”,水平高过唐代大师

亲子要闻

哪款纸尿裤更好用?低敏、透气、防漏全维度评测 | 2026

军事要闻

以色列总理、国防部长和国防军总参谋长发表联合声明

无障碍浏览 进入关怀版