MVC、MVP、MVVM浅要理解记录

本文深入解析了MVC、MVP、MVVM等前端架构框架的发展历程与核心优势,阐述了它们如何逐步解决代码耦合、业务逻辑复杂等问题,提高开发效率。

架构框架设计的出现,是为了解决一些问题与痛点。减少耦合,开发变得更简单,提高开发效率。
MVC的出现是为了:降低代码耦合度,减少重复代码,提高代码的重用性,并且在项目结构上更加清晰,便于维护。

MVC、MVP、MVVM是递进发展的前端框架。
MVP与MVVM是基于MVC发展出来的。解决的核心问题为,让开发者关注的点越来越少,更加专注于业务层的开发。
 

  • MVC

开发者需要同时关注Model、View、Controller,单向:V=>C=>M,M的改动会动过事件分发改变V的渲染。
缺点:视图逻辑不够解耦,耦合度相对高,需要关注三方。
pureMVC
纯正MVC,每个功能都有Model、View、Controller,代码量太多。

 

  • MVP(Model、View、Presenter)

MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方 Presenter负责逻辑的处理,Model提供数据,View负责显示。

特点:

  1. 各部分之间的通信,都是双向的。

  2. View 与 Model 不发生联系,都通过 Presenter 传递。

  3. View 非常薄,不部署任何业务逻辑,称为"被动视图"(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。

优点:

  1. 模型与视图完全分离,我们可以修改视图而不影响模型。
  2. 可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部。
  3. 我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。
  4. 如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)

M与V不直接联系。降低了耦合度。P作为中介者,处理V与M。开发者更多的关心V与P,M与P。
缺点:P会显得庞杂。

MVP和MVC的区别:
MVC中view和model是可以直接进行访问的,但是MVP中,不可以直接进行,需要Presenter来作为桥梁,所有的交互在presenter中进行,这样能够使view和model完全独立,修改试图也不会影响model。

 

  • MVVM

M与V不直接联系。比MVP多了binding 也就是绑定器
双向数据绑定,改变了V或者M,三方都改变。让开发者业务更加专注。更加解放了开发者,提高效率。
数据驱动。
适合开发大型的项目。
缺点:由于双向绑定,是如果出了问题,定位相对难。如果改变M的时候,不立即改变V,需要做特殊处理。

### MVCMVPMVVM架构模式的对比及优缺点 在Android开发中,MVC(Model-View-Controller)、MVP(Model-View-Presenter)和MVVM(Model-View-ViewModel)是三种常见的架构模式,它们的目标是通过分层设计来提升应用程序的可维护性和可测试性。以下是对这三种架构模式的详细比较: #### MVC(Model-View-Controller) MVC是一种经典的软件架构模式,其核心思想是将数据模型(Model)、用户界面(View)和控制逻辑(Controller)分离。这种模式适用于中小型项目,因为它的结构相对简单,但在大型应用中可能导致Controller臃肿[^1]。 - **优点**: - 结构清晰,易于理解。 - 分离了数据处理与UI显示,使得代码组织更合理。 - Controller负责协调Model和View之间的交互,有利于业务逻辑的集中管理。 - **缺点**: - 在复杂的场景下,Controller可能会变得非常庞大且难以维护。 - View直接依赖于Model,导致两者之间耦合度较高,不利于单元测试。 #### MVP(Model-View-Presenter) MVP是对MVC的一种改进形式,它进一步降低了View对Model的依赖,并引入了Presenter作为中间人来处理所有的交互逻辑。这种模式非常适合需要高度解耦的应用程序,尤其是那些重视单元测试覆盖率的项目[^2]。 - **优点**: - Presenter不持有任何Android框架对象,便于进行单元测试。 - View仅暴露必要的接口给Presenter调用,减少了View与Model之间的耦合。 - 更好的分离关注点,提高了代码的复用性和可维护性。 - **缺点**: - 需要为每个View定义接口,增加了额外的工作量。 - 对于简单的应用场景来说可能显得过于复杂。 #### MVVM(Model-View-ViewModel) MVVM利用数据绑定机制实现了View与ViewModel之间的自动同步,从而减少了手动更新UI的需求。它是现代Android开发中最推荐使用的架构模式之一,特别是当结合LiveData或StateFlow等响应式编程组件时效果更佳[^5]。 - **优点**: - 双向数据绑定简化了UI更新流程,提升了开发效率。 - ViewModel提供了一个抽象层,使得UI控制器更加轻量级。 - 支持声明式的数据流,有助于构建更加健壮和灵活的应用。 - **缺点**: - 初学者学习曲线较陡峭,尤其是对于不熟悉数据绑定概念的新手。 - 如果不当使用数据绑定,可能导致性能问题或者内存泄漏的风险。 ### 示例代码 下面是一个简化的MVVM示例,展示如何使用ViewModel和LiveData来管理UI相关的数据: ```kotlin class MyViewModel : ViewModel() { private val _text = MutableLiveData<String>().apply { value = "Hello World" } val text: LiveData<String> get() = _text } // 在Activity中观察ViewModel中的LiveData val viewModel: MyViewModel by viewModels() viewModel.text.observe(this, Observer { textView.text = it }) ``` 这段代码展示了MVVM的一个关键特性——即ViewModel如何通过LiveData向View层传递信息,同时保持低耦合度。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值