首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MVVM-C:为什么将协调器连接到ViewModel而不是视图?

MVVM-C是一种基于MVVM架构模式的衍生模式,它引入了协调器(Coordinator)的概念来处理视图之间的导航和协调。在MVVM-C中,协调器负责管理视图控制器(View Controller)之间的导航流程,并且将导航逻辑从视图控制器中解耦出来,使得视图控制器只关注展示数据和响应用户交互。

将协调器连接到ViewModel而不是视图的原因有以下几点:

  1. 解耦视图和导航逻辑:将导航逻辑放在协调器中可以将视图控制器从导航逻辑中解耦出来,使得视图控制器更加专注于展示数据和响应用户交互。这样可以提高代码的可维护性和可测试性。
  2. 单一职责原则:将导航逻辑放在协调器中符合单一职责原则,每个组件只负责一项具体的功能。视图控制器负责展示数据和响应用户交互,ViewModel负责处理业务逻辑和数据处理,而协调器负责管理导航流程。
  3. 可复用性和可扩展性:将导航逻辑放在协调器中可以使得导航逻辑更加可复用和可扩展。通过将协调器抽象成独立的组件,可以在不同的场景中重用相同的导航逻辑,同时也可以方便地扩展和修改导航流程。
  4. 统一管理导航状态:将导航逻辑放在协调器中可以统一管理导航状态,包括当前导航栈、导航历史记录等。这样可以更好地控制导航流程,实现页面之间的无缝切换和状态管理。

在腾讯云的产品生态中,可以使用云原生技术和服务来支持MVVM-C架构模式的开发。例如,可以使用腾讯云的容器服务(TKE)来部署和管理应用程序的容器化实例,使用云原生数据库TDSQL来存储和管理数据,使用云原生网络服务(VPC)来构建安全可靠的网络通信环境,使用云原生安全服务(CWS)来保护应用程序的网络安全,使用云原生人工智能服务(AI)来实现智能化的功能,使用云原生物联网服务(IoT)来连接和管理物联网设备等。

总之,将协调器连接到ViewModel而不是视图的主要目的是为了解耦视图和导航逻辑,提高代码的可维护性和可测试性,符合单一职责原则,并且可以实现导航逻辑的复用和扩展。在腾讯云的产品生态中,可以使用云原生技术和服务来支持MVVM-C架构模式的开发。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

安卓开发中的Model-View-Presenter(MVP模式)

对于MVVM,虽然ViewModel不知道View,但是View知道ViewModel,这使得重用具有不同ViewModel视图变得复杂。...依赖项投资原则(DIP)只在一个方向得到了解(视图=>服务,不是服务=>视图)。这个问题是存在的,因为两个方向上的依赖关系的给了我们更大的内聚性和更少的耦合,但也增加了复杂性。...因此,我们可以视图和服务理解为发出事件和接收信息的黑盒(通过输入和输出“电缆”),我们的Presenter 负责组件的输入电缆连接到另一个组件的输出电缆,反之亦然。...Service 我们的服务负责应用所有业务逻辑并协调不同的域服务,或者直接负责向应用程序提供/存储信息的存储库。...改进 有许多事情可以改进,例如: ViewModel: 可以在视图和表示之间添加一个额外的层,表示负责保存视图的状态。

1.6K30

MVC、MVP、MVVM 架构的特点与区别

(Model-View-Controller)和(Model-View-ViewModel)在概念上都是基于分层的,表现与数据分开的设计架构,M 和 V 基本上不是问题,但这两个整合的中间这层可就有很多的学问...耦合性低,视图层和业务层分离,这样就允许更改视图层代码不用重新编译模型和控制代码。...视图与控制间过于紧密连接,视图与控制是相互分离,但却是联系紧密的部件,视图没有控制的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。...Model 做沟通, View 可以透过一些机制 (例如: Events,Databindings…) 来和 ViewModel 沟通以取得数据或数据抛给 Model 做存取等工作,ViewModel...我们可以一个Presenter用于多个视图不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。

55010
  • MVC、MVP、MVVM 架构的特点与区别

    (Model-View-Controller)和(Model-View-ViewModel)在概念上都是基于分层的,表现与数据分开的设计架构,M 和 V 基本上不是问题,但这两个整合的中间这层可就有很多的学问...耦合性低,视图层和业务层分离,这样就允许更改视图层代码不用重新编译模型和控制代码。...视图与控制间过于紧密连接,视图与控制是相互分离,但却是联系紧密的部件,视图没有控制的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。...Model 做沟通, View 可以透过一些机制 (例如: Events,Databindings…) 来和 ViewModel 沟通以取得数据或数据抛给 Model 做存取等工作,ViewModel...我们可以一个Presenter用于多个视图不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。

    58910

    C# WPF MVVM开发框架Caliburn.Micro入门介绍①

    和Model之间的逻辑协调者。...例如,如果您确实需要,您可以为按钮“MouseMove”不是“Click”创建约定事件。 Binding 约定 我们还支持基于约定的数据绑定。这也适用于x:Name。...如果ViewModel上的属性与元素同名,我们尝试对其进行数据绑定。虽然框架了解操作的约定事件,但它还了解约定绑定属性(您可以自定义或扩展)。...View 定位 对于应用程序中的每个ViewModel,Caliburn.Micro都有一个基本策略来定位应该渲染它的视图。我们是根据命名约定来做这件事的。...这就是为什么。如果您更喜欢使用监控控制和被动查看不是MVVM,请继续。你会发现Caliburn.Micro可以帮助你很多,特别是它的Screen/ScreenConductor实现。

    1.8K20

    技术趋势:是什么让MVC悄然消失的?

    是的,不是Struts没了,也不是SpringMVC没了,而是MVC这种架构模式被淘汰了。当时代抛弃你时,一声再见都不会说。...MVC中的M就是单纯的从网络获取回来的数据模型,V指的我们的视图界面,C就是我们的ViewController。...ViewModel充当了一个UI适配器的角色,也就是说View中每个UI元素都应该在ViewModel找到与之对应的属性。...一般情况下ViewModel暴露的属性建议是readOnly的,至于为什么,我们在实战中会去解释。还有一点,ViewModel层是可以持有Model的。 Model层: 数据模型与持久化抽象模型。...数据模型很好理解,就是从服务拉回来的JSON数据。持久化抽象模型暂时放在Model层,是因为MVVM诞生之初就没有对这块进行很细致的描述。

    82420

    技术趋势:是什么让MVC悄然消失的?「建议收藏」

    是的,不是Struts没了,也不是SpringMVC没了,而是MVC这种架构模式被淘汰了。当时代抛弃你时,一声再见都不会说。...MVC中的M就是单纯的从网络获取回来的数据模型,V指的我们的视图界面,C就是我们的ViewController。...ViewModel充当了一个UI适配器的角色,也就是说View中每个UI元素都应该在ViewModel找到与之对应的属性。...一般情况下ViewModel暴露的属性建议是readOnly的,至于为什么,我们在实战中会去解释。还有一点,ViewModel层是可以持有Model的。...数据模型很好理解,就是从服务拉回来的JSON数据。持久化抽象模型暂时放在Model层,是因为MVVM诞生之初就没有对这块进行很细致的描述。

    74620

    iOS架构设计:揭秘MVC, MVP, MVVM以及VIPER

    为什么要可测试 对于那些已经习惯了单元测试的人来说,这通常不是问题,因为在添加了新的特性或者要增加一些类的复杂性之后通常会失败。...如果你严格遵循MVC,那么你应该从Controller配置cell,不是Model传递到cell中,这将增大Controller。...由于视图控制视图紧密耦合,因此很难测试——因为在编写视图控制的代码时,你必须模拟View的生命周期,从而使你的业务逻辑尽可能地与View层的代码分隔开来。...是的,它的名字是MVP(Passive View variant,被动视图变体)。等等...这是不是意味着苹果的MVC实际上是MVP?不,不是这样。...在MVP中,UIViewController的子类实际上是Views不是Presenters。

    1.4K20

    让人耳目一新的 Jetpack MVVM 精讲!

    Lifecycle 通过 模板方法模式 和 观察者模式,生命周期管理的复杂操作,全部在作为 LifecycleOwner 的基类中(例如视图控制的基类)封装好,默默地在背后为开发者运筹帷幄, 开发者因而得以在视图控制...唯一可信源是指 生命周期独立于 视图控制的 数据组件,通常是 单例 或共享 ViewModel) 这使得任何一次状态推送,都可预期、都能方便地追溯来源,不至于在 事件追溯复杂度为 n² 的迷宫中白费时间...对于重量级的状态,例如通过网络请求得到的 List,可以通过生命周期长于视图控制ViewModel 持有,从而得以直接从 ViewModel 恢复,不是以效率较低的序列化方式。...因此,对于 作用域共享 和 视图重建 的情况,状态因完好地被保留,得以被视图控制在恢复时直接使用。...因而,DataBinding 并非许多人不假思索认为的, UI 逻辑搬到 XML 中写 从而难以调试 —— 事实根本不是这样的: DataBinding 只负责绑定数据、负责作为 UI 逻辑末端的状态的改变

    99120

    使用流动控制(Flow Controller )实现 MVVM 协议模型

    一个月前我看完了 Steve “Scotty” Scott 关于 MVVM-C 的课程。在这个我今年看过最佳视频之一的视频中,阐述了最重要的不是代码量减少,而是这个架构能让我们的软件有什么提升。...这种独立意味着在我想要让界面灵活可变的时候可以用这种控制来实现。另一个例子是抽象相似界面,如网格和列表使用相同的 ViewModel 。...我不会讲太多我决定构建的内容有多混乱,因为我在很短的的时间( 8 小时)内测试我的抽象极限,现在正在完善的代码,不是增加项目。 在下一节中,我讲讲实验的结果。...关于 MVVM 与流控制的基本方案 一个流初始化时会构建一个 ViewModel 和 Model(需要的话会更多),启动创造了必要的接口的方法,添加它的依赖。...我们永远不明白为什么在一个案例中运行好好地,另一个则不起作用。

    99640

    C# WPF MVVM开发框架Caliburn.Micro 关于Conventions⑧

    如果是这样,它将调用它的GetView方法来查看您是否有缓存的视图,或者是否显式地处理视图创建。如果不是,则将ViewModel的类型传递给LocateForModelType。...您会注意到上面讨论的所有方法都是作为Funcs实现的,不是实际的方法。这意味着您可以通过简单地用自己的实现替换它们来定制它们。...在FrameAdapter内部,当页面被导航到时,首先使用ViewModelLocator获取该页面的ViewModel。然后,使用ViewModelBinderViewModel接到页面。...8它采用选择的所有约定(将其ContentTemplate不是ItemTemplate设置为DefaultDataTemplate),并为选项卡标题的内容提供了一个附加约定。...例如,如果你喜欢动作约定不是属性约定,你可以用一个不做任何事情的Func替换这个Func。然而,您可能需要更细粒度的控制。

    2.8K20

    每日一面试题之Day1

    它们通过ViewModel来通信,ViewModel通常要实现一个observer观察者,当数据发生变化,ViewModel能够监听到数据的这种变化,然后通知到对应的视图做自动更新,当用户操作视图ViewModel...即模型-视图-控制。M和V指的意思和MVVM中的M和V意思一样。C即Controller指的是页面业务逻辑。使用MVC的目的就是M和V的代码分离。‘MVC是单向通信。...MVC和MVVM的区别并不是VM完全取代了C,ViewModel存在目的在于抽离Controller中展示的业务逻辑,不是替代Controller,其它视图操作业务等还是应该放在Controller中实现...3、为什么会有MVVM框架?...在过去的10年中,我们已经把很多传统的服务端代码放到了浏览中,这样就产生了成千上万行的javascript代码,它们连接了各式各样的HTML 和CSS文件,但缺乏正规的组织形式,这也就是为什么越来越多的开发者使用

    31030

    【译】LiveData with Coroutines and Flow

    这意味着没有中断,也不需要在重新创建视图时进行清理。 撇开命名不谈,有两种机制可以数据从ViewModel/Presenter发送到View。 拥有对视图的引用并直接调用它。...当一个视图(一个Activity、Fragment或任何生命周期的所有者)被创建时,ViewModel被获得,它开始通过一个或多个LiveDatas暴露数据,视图订阅了这些数据。...现在,如果设备被旋转,那么视图将被销毁(#1),并创建一个新的实例(#2)。 如果我们在ViewModel中有一个对Activity的引用,我们需要确保。...然而,虽然轮子让非阻塞的一次性操作变得更容易,但这对Flow来说并不是同样的情况。Flow仍然是难以掌握的。不过,如果你想创建快速可靠的反应式UI,我认为值得花时间来学习。...因此,我们可以从数据源和存储库中暴露Flow,不是LiveData,但ViewModel仍然暴露LiveData,因为它是生命周期感知的。

    1.4K10

    关于 MVVM和MVC的这些,你知道吗?

    如果体量不是他大,前端的东西也不是特别多,考虑成本问题,前后端一个人写,那Modelandview就很合适,节省了接口协调,对接等时间成本问题。...它是数据模型双向绑定的思想作为变革的核心,即View的变动,自动反映在ViewModel上面,ViewModel的变动也会随即反映在View上面,从而实现数据与模型的双向绑定。...的事件并格式化数据,不负责控制应用的状态; ViewModel 用于封装业务逻辑层,这点类似于 MVC 模式中的控制,它控制View的很多显示逻辑,它可以把数据模型的变化传递给视图,也可以把视图中数据的变化传递给数据模型...因此在文档中经常会使用 vm (ViewModel 的缩写) 这个变量名表示组件实例 通过双向数据绑定连接视图层和数据,实际的界面 UI 操作(DOM 操作)被封装成对应的指令(Directives...因此它是针对 整个对象,不是 对象的某个属性。

    78800

    系统架构师-基础到企业应用架构-分层

    2)、如果我要求业务逻辑层实现也不一定固定,例如在医疗行业的话,每个医院的业务系统或业务流程都不相同,那么假设我们希望沟通统一的UI界面,不是随着业务逻辑的改变修改UI,那么我们就需要进行如下的设计...接着应用层进行操作上的协调,利用Repository、领域模型、领域层服务Domain Service 完成业务需要,再通过数 据转换把领域对象Domain Object转化为数据传输对象DTO。...控制 控制接受用户的输入并调用模型和视图去完成用户的需求,所以当单击Web页面中的超链接和发送HTML表单时,控制本身不输出任何东西和做任何处理。...界面素来是比较难于测试的,现在测试可以针对ViewModel来写。 ? 1. 视图(View) 视图负责界面和显示。...一般来说实际的项目中会采用以下的模式来做,不是直接采用传统的MVVM模式,而是结合MVP或MVC模式来做。 ?

    1.3K20

    iOS面试题:MVVM和MVC的区别

    业务逻辑很明显不归入view,视图本身没有任何业务。 C:控制controller。Controller是app的“胶水代码”:协调模型和视图之间的所有交互。...控制负责管理他们所拥有的视图视图层次结构,还要响应视图的loading、appearing、disappearing等等,同时往往也会充满我们不愿暴露的model的模型逻辑以及不愿暴露给视图的业务逻辑...MVVM 一种可以很好地解决Massive View Controller问题的办法就是 Controller 中的展示逻辑抽取出来,放置到一个专门的地方,而这个地方就是 viewModel 。...它正式规范了视图和控制紧耦合的性质,并引入新的组件。...view 重用这段视图逻辑 独立开发:开发人员可以专注于业务逻辑和数据的开发 viewModel,设计人员可以专注于页面设计 可测试:通常界面是比较难于测试的, MVVM 模式可以针对 viewModel

    1.4K30

    关于 MVVM和MVC的一些总结

    当然这些事ViewModel已经帮我们做了,它可以取出 Model 的数据同时帮忙处理View中由于需要展示内容涉及的业务逻辑。...如果体量不是他大,前端的东西也不是特别多,考虑成本问题,前后端一个人写,那Modelandview就很合适,节省了接口协调,对接等时间成本问题。 ?...它是数据模型双向绑定的思想作为变革的核心,即View的变动,自动反映在ViewModel上面,ViewModel的变动也会随即反映在View上面,从而实现数据与模型的双向绑定。...的事件并格式化数据,不负责控制应用的状态; ViewModel 用于封装业务逻辑层,这点类似于 MVC 模式中的控制,它控制View的很多显示逻辑,它可以把数据模型的变化传递给视图,也可以把视图中数据的变化传递给数据模型...因此它是针对 整个对象,不是 对象的某个属性。

    2.7K30

    系统架构师-基础到企业应用架构-分层

    2)、如果我要求业务逻辑层实现也不一定固定,例如在医疗行业的话,每个医院的业务系统或业务流程都不相同,那么假设我们希望沟通统一的UI界面,不是随着业务逻辑的改变修改UI,那么我们就需要进行如下的设计...接着应用层进行操作上的协调,利用Repository、领域模型、领域层服务Domain Service 完成业务需要,再通过数 据转换把领域对象Domain Object转化为数据传输对象DTO。...控制 控制接受用户的输入并调用模型和视图去完成用户的需求,所以当单击Web页面中的超链接和发送HTML表单时,控制本身不输出任何东西和做任何处理。...界面素来是比较难于测试的,现在测试可以针对ViewModel来写。 ? 1. 视图(View) 视图负责界面和显示。...一般来说实际的项目中会采用以下的模式来做,不是直接采用传统的MVVM模式,而是结合MVP或MVC模式来做。 ?

    99450

    前端面试宝典(五)—— Vue

    MVVM是Model-View-ViewModel的简写,Model 层代表数据模型,也可以在 Model 中定义数据修改和操作的业务逻辑;View 代表 UI 组件,它负责数据模型转化成 UI 展现出来...在MVVM的框架下视图和模型是不能直接通信的。...它们通过ViewModel来通信,ViewModel通常要实现一个observer观察者,当数据发生变化,ViewModel能够监听到数据的这种变化,然后通知到对应的视图做自动更新,当用户操作视图ViewModel...MVC中M是Model(数据模型),用于存放数据;V是View(视图),也就是用户界面;C则是Controller是Model和View的协调者,Controller把Model中的数据拿过来给View...区别:vue 数据驱动,通过数据来显示视图不是节点操作。且mvvm 主要解决了 mvc 中大量的 DOM 操作使页面渲染性能降低,加载速度变慢,影响用户体验。 ? Vue生命周期的理解?

    65810

    引入Jetpack架构后,你的App会发生哪些变化?

    答案显而易见,无非是想让数据使用者感知到而已,LiveData可以优雅的实现这一流程, 改变、通知 两步操作合并为一步 即省事也提高了安全性....Jetpack ViewModel是一个实实在在的框架用于做状态托管,有对应的作用域可跟随Activity/Fragment生命周期,但这种特性恰好可以充当MVVM ViewModel的角色,分隔数据层和视图层并做数据托管...既然是状态托管框架那ViewModel的第一要务 就要时时刻刻保证最新状态分发到视图层,这让我不禁想到了LiveData,数据的承载以及分发交给Livedata,ViewModel专注于托管LiveData...并不是我同意xml中写业务逻辑这一观点,我觉得碰到问题就得去解决问题,如果解决问题的路上有障碍就尽量扫清障碍,不是一味的逃避。 如{vm.isShow ?...UI逻辑的处理 Repository(远程): 代表远程仓库,从Repository取需要的数据 ViewModel: Repository取出的数据需暂存到ViewModel,同时数据映射到视图

    1K31

    引入Jetpack架构后,你的App会发生哪些变化?

    Jetpack ViewModel是一个实实在在的框架用于做状态托管,有对应的作用域可跟随Activity/Fragment生命周期,但这种特性恰好可以充当MVVM ViewModel的角色,分隔数据层和视图层并做数据托管...既然是状态托管框架那ViewModel的第一要务 就要时时刻刻保证最新状态分发到视图层,这让我不禁想到了LiveData,数据的承载以及分发交给Livedata,ViewModel专注于托管LiveData...比如我的开源项目中的音乐播放(属于单Activity多Fragment架构),播放页和首页悬浮都包含音乐基本信息,如下图所示: [image.png] 想要使两个Fragment中播放信息实时同步,最优雅的方式是播放状态托管在...并不是我同意xml中写业务逻辑这一观点,我觉得碰到问题就得去解决问题,如果解决问题的路上有障碍就尽量扫清障碍,不是一味的逃避。 如{vm.isShow ?...UI逻辑的处理 Repository(远程): 代表远程仓库,从Repository取需要的数据 ViewModel: Repository取出的数据需暂存到ViewModel,同时数据映射到视图

    84000
    领券