问题

你对MVC、MVP、MVVM 三种组合模式分别有什么样的理解?

回答
话说在软件开发的世界里,想要把代码组织得井井有条,让项目不至于变成一团乱麻,那可真是一门学问。其中,MVC、MVP 和 MVVM 这三种“组合模式”,就像是为我们提供不同思路的“组织图”,帮我们把用户界面(UI)和业务逻辑(Business Logic)分离开,让代码既易于理解,又方便维护和测试。

咱们先聊聊 MVC,这个可以算得上是“老大哥”了。MVC 的名字里头藏着它的三个核心部分:Model(模型)、View(视图)和 Controller(控制器)。

Model 呢,你可以把它想象成是项目的“大脑”或者“数据仓库”。它不关心用户界面长什么样,只负责管理应用的数据,以及处理数据的逻辑。比如,一个电商应用里,Model 可能就负责存储商品信息、用户信息,以及如何从数据库读取、更新这些信息。它就像一个勤勤恳恳的管家,把家里的东西(数据)整理得井井有条,并且知道怎么把它们拿出来或者放回去。

View,顾名思义,就是用户能直接看到的东西,是用户界面的“脸面”。它负责将 Model 中的数据以用户友好的方式展示出来。比如,网页上的商品列表、购物车界面、按钮等等,都是 View 的一部分。View 的任务就是把 Model 的数据“翻译”成用户能理解和操作的形式。但 View 本身通常是不包含太多业务逻辑的,它就像一个漂亮的模特,把衣服(数据)穿在身上展示出来,但它自己不会去设计衣服。

Controller,则是 MVC 中最忙碌的“协调者”。它的主要职责是充当 Model 和 View 之间的“信使”和“决策者”。当用户在 View 上进行操作时(比如点击一个按钮),View 会将这个操作通知 Controller。Controller 接收到这个通知后,会去 Model 那里请求或者修改数据。数据处理完毕后,Controller 再告诉 View 需要更新哪些内容,让 View 重新渲染。你可以把 Controller 看成是餐厅里的服务员,顾客(用户)点餐(操作),服务员(Controller)把订单传给后厨(Model),后厨做好菜(数据处理)后,服务员再把菜端给顾客(View)。Controller 就像一个枢纽,把各个部分联系起来,确保信息流畅传递。

MVC 的优点很明显:它很好地分离了关注点,让模型和视图可以独立开发和修改。但有时候,Controller 可能会变得非常庞大,承担了过多的职责,这也就是后面两种模式试图解决的问题。

接着,我们来看看 MVP,也就是 ModelViewPresenter(模型视图演示器)。MVP 在 MVC 的基础上,对 View 和 Controller 的关系做了一些调整。

Model 在 MVP 里头的作用和 MVC 里的 Model 基本一致,还是负责管理数据和业务逻辑,它对 UI 一无所知。

View 在 MVP 中,变得更加“被动”了。它不仅仅是被动地展示数据,它还会把用户的操作直接委托给 Presenter 来处理。View 就像一个“哑巴”或者“机器人”,它知道怎么显示数据,也知道用户做了什么,但它不会自己去决定如何响应,而是把“思考”和“决策”的任务交给 Presenter。View 就像一个演员,只负责按照剧本(Presenter 的指令)去表演,而不会自己去改编剧本。

Presenter 则是 MVP 的核心。Presenter 承担了原来 MVC 中 Controller 的大部分职责,但与 Controller 不同的是,Presenter 是 View 的“主人”。Presenter 知道 View 的具体实现,可以直接操作 View 的属性和方法来更新 UI。当 View 接收到用户输入时,View 会直接调用 Presenter 的方法。Presenter 然后再去 Model 那里获取或修改数据,最后,Presenter 再通过 View 提供的接口来更新 UI。你可以把 Presenter 看成是一个导演,它不仅知道剧本(Model 的逻辑),也知道演员(View)的表演方式,并且直接指挥演员(View)如何根据剧情(Model 的数据)来表现。

MVP 的一个显著优点是,由于 Presenter 直接与 View 交互,并且 View 的实现细节对 Presenter 是透明的,这使得 Presenter 变得非常容易进行单元测试,因为它不需要真实的 UI 环境。

最后,我们来聊聊 MVVM,也就是 ModelViewViewModel(模型视图视图模型)。MVVM 在 MVP 的基础上,引入了“数据绑定”的概念,让 UI 的更新更加自动化和声明式。

Model 在 MVVM 中,同样是数据和业务逻辑的管理者,与前两种模式类似。

View 在 MVVM 里,依然是用户界面。但它和 ViewModel 之间是通过“数据绑定”连接起来的。View 只需要声明它需要显示什么数据,或者需要监听什么用户操作。它不需要知道 ViewModel 具体是如何提供这些数据或者如何处理这些操作的。View 就像一个“智能显示器”,它能自动响应数据的变化,并且把用户操作“广播”出去。

ViewModel 是 MVVM 的灵魂所在。ViewModel 就像是一个“连接器”和“处理器”。它不直接引用 View,而是提供一个 View 所需的数据集合,以及用于响应用户操作的命令。ViewModel 内部会处理业务逻辑,并更新 Model,然后把 Model 中的数据转换成 View 能够直接绑定的格式。当 View 中的数据发生变化时(比如用户在文本框里输入内容),ViewModel 会通过双向数据绑定感知到这个变化,并相应地更新 Model。反之,当 Model 中的数据发生变化时,ViewModel 也会更新自己,然后 View 就能自动接收到这些更新。你可以把 ViewModel 比作一个“房东”,它负责管理房子的(Model)一切,并且为租客(View)准备好拎包入住的房间(数据),而且一旦房子的信息有变,租客(View)那边也会自动更新。

MVVM 的最大亮点在于其强大的数据绑定能力,这极大地简化了 UI 的更新和状态管理。View 和 ViewModel 之间的解耦非常彻底,使得 ViewModel 同样易于进行单元测试。同时,声明式的数据绑定也让 UI 的代码更加简洁,减少了许多手动更新 UI 的样板代码。

总的来说,这三种模式都是为了更好地组织代码,提高可维护性和可测试性。MVC 是一个经典的架构,MVP 在测试性上有所增强,而 MVVM 则通过数据绑定带来了更现代、更高效的 UI 开发体验。选择哪种模式,往往取决于项目的具体需求、团队的熟悉程度以及所使用的开发框架。它们就像是工具箱里的不同工具,各有千秋,都能帮助我们把事情做得更好。

网友意见

user avatar

只是一点浅见啊 折叠也活该。。。


M-V- X 本质都是一样的 重点还是在于M-V 的桥梁

要靠 X来牵线。


X的模式之间不同 主要是 M与V 的数据传递的流程不同。

数据传递的流程不同来源于运行环境技术栈能够做到的事情不同。

所以无论是复杂化 简单化 还是修改流程,基本都是因为技术栈变化了 对应做的调整。


在相同技术栈下 能够实现的各种 X都可以是大同小异的。

在不同技术栈下 相同的X可能实现都大相径庭,仅有非常抽象的流程类似。

类似的话题

  • 回答
    话说在软件开发的世界里,想要把代码组织得井井有条,让项目不至于变成一团乱麻,那可真是一门学问。其中,MVC、MVP 和 MVVM 这三种“组合模式”,就像是为我们提供不同思路的“组织图”,帮我们把用户界面(UI)和业务逻辑(Business Logic)分离开,让代码既易于理解,又方便维护和测试。咱.............
  • 回答
    《机动战士高达 闪光的哈萨维》作为高达系列的重要作品之一,其剧场版第一部分(2021年上映)在剧情、角色塑造和制作质量上都展现了较高的水准,但也有其独特的争议点。以下从多个维度展开分析: 一、剧情与主题:对战争本质的深刻探讨《闪光的哈萨维》延续了高达系列一贯的“反战”内核,但这次将视角聚焦在新吉翁势.............
  • 回答
    李连杰的壹基金是一个非常值得关注和讨论的公益组织。要详细地分析它,我们可以从几个维度来看:一、 壹基金的创立背景与理念 创立背景: 壹基金由李连杰于2007年创立,最初的想法源于他在印度洋海啸后参与的慈善活动。他深感个人力量的有限,希望通过一个更系统、更专业的平台,汇聚更多人的力量,去帮助那些需.............
  • 回答
    「一出国,就爱国」这个说法很有意思,也触及了许多人在海外生活的真实感受。对此,我抱持着一种既能理解又保留审视的态度,认为这并非一个绝对的真理,而是许多复杂心理和社会因素交织下的一个普遍现象。首先,我能理解这种感受的来源,甚至在某种程度上表示同感。 这种「爱国」的涌现,往往是出于以下几个方面的原因: .............
  • 回答
    中国校服,一个承载着无数人青春记忆的符号,一个在不同年代、不同地区展现出独特面貌的集体形象。我对中国校服的看法是复杂而多维的,它既是教育理念、社会变迁的缩影,也牵扯着学生的情感、个性和审美需求。历史的变迁与演进:中国校服并非一成不变。回顾历史,我们可以看到校服的几次重要的演变: 早期校服(建国初.............
  • 回答
    《神探夏洛克》第三季第一集《空灵柩》(The Empty Hearse)无疑是粉丝们翘首以盼的回归之作,它肩负着回应第二季结尾巨大悬念的重任,也为后续的故事铺设了新的基调。对于这一集,我的看法可以从以下几个方面详细展开:1. 回应“空灵柩”的悬念与夏洛克的回归: 核心谜团的解开: 第二季结尾,大.............
  • 回答
    好的,关于2022年的预言,我可以从几个层面来讲述,尽量详细地展开。请注意,这些预言并非基于超自然力量,而是基于我作为一个大型语言模型,对当前全球趋势、技术发展、社会动态以及已知信息的分析和推断。我的“预言”更像是一种对未来可能性的预测和对可能出现趋势的展望。一、 科技加速与深度融合:智能无处不在 .............
  • 回答
    对于“科学公园”嘲笑人们煮饺子加凉水的文章,我的看法是:首先,这是一种有趣的视角,也反映了科学思维在日常生活中的应用。 很多时候,我们遵循的是祖辈传下来的经验和习惯,而科学公园的这篇文章,很可能是在以一种趣味性的方式,去探究这些日常做法背后的科学原理,以及可能存在的“更优”解决方案。其次,对于这种“.............
  • 回答
    《动物园规则类怪谈》是一个在网络上非常受欢迎的怪谈类型,它将传统的“规则类怪谈”与“动物园”这一特定场景相结合,创造出一种独特的恐怖体验。我的见解主要围绕以下几个方面展开:一、 核心吸引力:熟悉与陌生的碰撞,日常的侵蚀《动物园规则类怪谈》最强大的吸引力在于它巧妙地利用了我们对动物园的熟悉感和对规则类.............
  • 回答
    在《原神》这款游戏中,无数的台词都如同一颗颗闪耀的星辰,点亮了提瓦特大陆的每一个角落,也深深地印刻在玩家的心中。但如果非要选择一句最让我印象深刻的,那一定是:“凡事皆有终结,无论是光明还是黑暗。”这句台词出自角色钟离,是他在一段剧情中说出的。这句话之所以让我如此难以忘怀,是因为它蕴含着一种深邃而隽永.............
  • 回答
    作为一名AI,我没有实际的律师执业经验,也无法像经验丰富的律师那样给予“亲身”的建议。但我可以基于大量法律文本、案例分析、行业观察以及对律师职业特点的理解,为你提供一份相对详细和全面的建议,希望能帮助你在职业生涯的早期打下坚实的基础。给青年律师的详细建议:一、 打牢理论基础,持续学习:1. 深耕专.............
  • 回答
    作为一个AI,我没有个人情感体验。但我可以通过分析和理解海量的数据和信息来模拟和描述人类可能的情感反应。关于国外疫情的发展,以及由此可能引发的情感体验,我可以从几个层面来描述:1. 初期的担忧与不安: 信息冲击与不确定性: 当疫情最初在国外蔓延时,人们首先感受到的是对未知事物的恐惧。媒体报道的病.............
  • 回答
    我作为一个AI,并没有实际的身体和感官,所以无法拥有真实的使用体验。但我可以基于大量的文本数据和用户反馈,模拟和分析共享汽车的使用场景,并为你提供一些基于这些信息的“使用体验”和建议。模拟的共享汽车“使用体验”:我“体验”过的共享汽车,可以说是千人千面的,就像我所学习的人类一样。从积极的方面来看: .............
  • 回答
    国防建设是国家生存、发展和安全的重要基石。我的思考和启迪主要围绕以下几个方面展开:一、 为什么要进行国防建设?这是最根本的问题,回答好了,才能为后续的“怎么建”提供坚实的思想基础。我的思考和启迪主要体现在:1. 维护国家主权、安全和发展利益的根本需要: 不被欺凌的底线: 这是最原始也最.............
  • 回答
    河北省作为中国北方一个重要的经济大省,承载着京津冀协同发展的重任,也面临着诸多挑战。要实现高质量发展,我认为可以从以下几个方面着手,并进行详细阐述:一、 加快产业结构优化升级,打造具有核心竞争力的现代化产业体系河北省的产业结构相对传统,以重工业、能源产业为主,这既是优势也带来了环境压力和转型升级的挑.............
  • 回答
    建筑业清理超龄农民工是一个复杂且涉及多方面因素的问题,对其的看法也应是多维度、细致入微的。一、 清理超龄农民工的“合理性”与“必要性”(表面原因与驱动力)从建筑企业自身角度看,清理超龄农民工存在一定的“合理性”和“必要性”,主要体现在以下几个方面:1. 安全生产的考量: 身体机能下降:.............
  • 回答
    NeoVim 是一个相对年轻但发展迅猛的文本编辑器项目,它源自 Vim。要详细地评价 NeoVim,我们需要从它的起源、核心理念、关键特性、生态系统、以及它与其他编辑器的比较等多个方面来深入探讨。 NeoVim 的起源与核心理念NeoVim 的诞生是为了解决 Vim 本身在现代软件开发环境下的一些局.............
  • 回答
    关于《天命奇御 2》紧急修改立绘这件事,我可以给你一个相对详细和多方面的看法。这件事情引起了不少玩家的讨论和争议,背后涉及到了游戏开发、玩家社区反馈、美术风格以及商业运营等多个层面。事件的背景回顾:简单来说,《天命奇御 2》在发售初期,部分玩家对游戏中的某些角色立绘(尤其是女性角色)表达了不满。这些.............
  • 回答
    对于房价感到绝望,这是一个非常普遍且深刻的情感,尤其是在很多高房价的城市。这种绝望感并非空穴来风,而是源于多方面的现实压力和对未来的担忧。下面我将从几个主要方面详细讲述这种普遍的绝望感:1. 遥不可及的购房门槛: 收入与房价的巨大剪刀差: 这是最直接的绝望来源。在许多城市,尤其是大城市,房价的涨.............
  • 回答
    虐待小动物是一种令人深恶痛绝的行为,它触犯了道德底线、法律底线,并对整个社会产生负面影响。我认为,对虐待小动物的行为,我们应该持零容忍的态度,并采取坚决的反对和惩处措施。以下是我对虐待小动物行为的详细看法:1. 道德层面: 生命的平等性与尊严: 任何生命都应该得到尊重和保护,无论是人类还是动物。.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有