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

MVP模式:多个Presenter应该解耦还是可以直接通信?

在软件开发中,MVP(Model-View-Presenter)模式是一种设计模式,用于实现用户界面和业务逻辑之间的解耦。在MVP模式中,有三个主要组件:模型(Model)、视图(View)和表示器(Presenter)。

在多个Presenter之间的通信问题上,应该遵循以下原则:

  1. 解耦:Presenter之间应该尽量解耦,以便于维护和扩展。如果多个Presenter之间有直接通信,那么在修改其中一个Presenter时,可能会影响其他Presenter的功能。
  2. 职责分离:每个Presenter应该负责自己的职责范围,而不是试图控制其他Presenter的功能。这样可以避免出现错误和潜在的bug。
  3. 通信方式:如果多个Presenter之间需要通信,可以通过以下方式实现:

a. 通过Model:Model是所有Presenter共享的数据源,可以通过Model来传递数据和事件。

b. 通过事件(Event):使用事件总线(Event Bus)或者观察者模式(Observer Pattern),在一个Presenter中触发事件,然后在其他Presenter中监听和处理这些事件。

c. 通过接口(Interface):定义一个接口,然后在需要通信的Presenter中实现这个接口。这样,各个Presenter之间可以通过这个接口进行通信。

综上所述,多个Presenter之间应该解耦,避免直接通信。这样可以保证代码的可维护性和可扩展性,并降低出现bug的风险。

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

相关·内容

JavaScript 设计模式学习第二十六篇- MVC、MVP、MVVM 模式

MVP 模式:在 MVC 基础上进一步,视图层和模型层完全隔离,交互只能通过管理层来进行,问题是更新视图需要管理层手动来进行; 3....MVVM 模式:引入双向绑定机制,帮助实现一些更新视图层和模型层的工作,让开发者可以更专注于业务逻辑,相比于之前的模式可以使用更少的代码量完成更复杂的交互; MVC、MVP、MVVM 模式是我们经常遇到的概念...,为了解决这个问题,MVP 模式将 View 层和 Model 层,之间的交互只能通过 Presenter 层,实际上,MVP 模式的目的就是将 View 层和 Model 层完全,使得对 View...和 MVP 模式类似,Model 层和 View 层也被隔离开,彻底,ViewModel 层相当于 Presenter 层,负责绑定 Model 层和 View 层,相比于 MVP 增加了双向绑定机制...这是为什么呢,因为 MVVM 模式要求 Model 层和 View 层完全,但是由于 Vue 还提供了 ref 这样的 API,使得 Model 也可以直接持有 View: ?

66810

Android MVC、MVP、MVVM、MVP-databinding 架构单元示例

如果页面比较单一,采用MVC也未尝不可; 如果需要稳定性高,性强就可以选用MVP,使M层与V层分离,结构更清晰; 如果想尝鲜(其实已经有段时间了),少写接口,高效,也可以使用MVVM; 阮一峰《MVC...MVP MVP 模式将 Controller 改名为 Presenter,同时改变了通信方向。...[来自MVP----MVC,MVP 和 MVVM 的图示] 通过P层将Model层与View层,同时P与V、P与M可以相互通信。...MVC:简单,单一页面可以实现。但是不利于复杂页面。 MVP,结构清晰。但文件较多,每一个页面基本要新建P层和V层的文件,同时还会有findViewById操作。...MVVM:,结构相对清晰,文件相对MVP较少。但如果页面显示比较复杂,需要通过多个值去控制页面的显示,或者页面一个值的显示 要通过多种逻辑去处理得到结果,个人感觉还是不太适用。

1.2K40

跟着google学习mvp架构

MVC和MVP最大的区别在于,MVC中M和V是可以通信交流,而MVP中M和V是没法直接交流的。 Base的View ? Base的Presenter ?...而Presenter接口中,定义所有控制逻辑的方法。 ? 其简单图示关系 ? MVP是通过接口的方式来,所以View和Presenter都是通过接口来。 在TaskActivity中 ?...TasksRepositroy相当于数据提供者(Model),其本身也是通过接口来,而TasksContract.View相当于界面显示(View),也是接口。...这里看了数据层运用的,看起来是简单的封装,其实算是外观模式加接口的变种。 其封装好里面调用的多个类流程代码,通过一个接口类,让外界调用它的流程。...View层: 职责: MVP模式下,View层终于扬眉吐气了,View本身该做的事情都能做了,比如UI布局,数据渲染,点击按钮交互等等 测试方式: 以正常小QA的测试思维方法,就可以来定义这一层的测试方式

61040

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

MVC模式的特点在于实现关注点分离,即应用程序中的数据模型与业务和展示逻辑。...Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变,这样就可以重用。...我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。...因此,MVP模式出现了。 Presenter: 比起Controller,Presenter会调用View层提供的接口去渲染Model。...这样做有几点好处: 面向接口编程 更好的 方便做单元测试 现在P和V了,P可以自己做单元测试了。软件结构划分的更加清楚,逻辑清晰并方便调试。但是这一切都来自于一个前提:View层要提供接口。

34510

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

MVC模式的特点在于实现关注点分离,即应用程序中的数据模型与业务和展示逻辑。...Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变,这样就可以重用。...我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。...因此,MVP模式出现了。 Presenter: 比起Controller,Presenter会调用View层提供的接口去渲染Model。...这样做有几点好处: 面向接口编程 更好的 方便做单元测试 现在P和V了,P可以自己做单元测试了。软件结构划分的更加清楚,逻辑清晰并方便调试。但是这一切都来自于一个前提:View层要提供接口。

45110

一步一步实现Android的MVP框架

两个方法最终要实现的就是,分层讲的是纵向层面上的,模块化则是横向上的。下面我们来详细讨论一下 Android 开发如何实现不同层面上的。...的常用方法有两种:分层 与模块化 横向的模块化对大家来可能并不陌生,在一个项目建立项目文件夹的时候就会遇到这个问题,通常的做法是将相同功能的模块放到同一个目录下,更复杂的,可以通过插件化来实现功能的分离与加载...接口的作用类似给层与层之间制定的一种通信协议,两个不同的层级相互交流,只要遵守这些协议即可,并不需要知道具体的实现是怎样 看到这里,有人可能就要问,这跟直接调用有什么区别,为什么要大费周章的给 view...这也正是使用接口来处理每个层级互相通信的好处,可以根据使用场景的不用,使用不同的实现 到现在为止一个基于 MVP 简单框架就搭建完成了,但其实还遗留了一个比较大的问题。...因为 presenter 层并不知道业务层以及数据层到底是从网络获取数据,还是从本地获取数据(符合层级间相互透明的原则),因为每次调用都可能存在触发这个问题。

1.5K61

软考高级架构师:MVP 架构概念和例题

更容易测试和维护,因为Presenter可以通过接口独立于视图 简言之,MVP模式通过引入Presenter作为View和Model之间的中介,实现了更清晰的分离和更低的耦合度。...Controller MVP模式Presenter组件主要负责什么? A. 数据存储 B. 界面布局 C. 业务逻辑处理 D. 网络通信 如何描述MVP模式中的View组件? A....直接访问数据库 在MVP模式中,改变程序数据模型的正确方法是? A. 直接从View修改Model B. 通过Presenter修改Model C. 通过数据库操作修改Model D....PresenterMVP模式中负责业务逻辑的处理。 答案:C. 被动展示数据。 View在MVP模式中被设计为被动地展示数据,它不直接操作数据,而是通过Presenter来更新。...通过Presenter修改Model。 在MVP架构中,所有对Model的修改都应该通过Presenter来进行,这样做可以保持View和Model之间的。 答案:C.

3700

MVP模式

MVP模式 MVC即模型Model、视图View、管理器PresenterMVP模式从MVC模式演变而来,通过管理器将视图与模型巧妙地分开,即将Controller改名为Presenter,同时改变了通信方向...,MVP模式模式不属于一般定义的23种设计模式的范畴,而通常将其看作广义上的架构型设计模式。...描述 在MVC里View是可以直接访问Model中数据的,但MVP中的View并不能直接使用Model,而是通过为Presenter提供接口,让Presenter去更新Model,再通过观察者模式等方式更新...View,与MVC相比,MVP模式通过View和Model,完全分离视图和模型使职责划分更加清晰,由于View不依赖Model,可以将View抽离出来做成组件,其只需要提供一系列接口提供给上层操作。...} MVP.prototype.presenter = function(el){ /* 一些处理 */ /* 重点是presenter部分 指令的解析、

50810

常见的客户端架构解析

尽管如此,View 和 Model 是完全的。 View 通过 Controller 得知 Model 中数据的变化;并且将用户发起的变化通过 Controller 反映到 Model。...我还是觉得真的要用 MVVM 就必须建立一套绑定机制,可以利用 RxSwift 和 RAC 之类的第三方库,或者自己撸一套。 MVP ?...MVP 的主要思想是用户输入由 V 流进,V 通过 P 更新 M,同时 V 跟 M 之间还是跟 MVC 中一样,V 可以调用 M 的接口,M 通过观察者模式向 V 广播自身的更新。...同 MVC 一样,而今的 MVP 与最早的 MVP 也相距甚远。现在为人所普遍接受的 MVP 是,V 和 M 完全,通过 P 进行通讯。...小结 对于结构划分,还是要根据项目规模来,规模大就分层细一点,规模小就粗一点。因为分层越多,层与层之间的通信成本就越高。通信方面可以采取各种手段——接口调用、观察监听、数据绑定等。

2K30

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

在MVC框架中,View是可以直接访问Model的(JSP里直接使用JavaBean),这样不可避免的使View里面也需要包括一些业务逻辑,同时还需要Model保持不变,而Model又对应着多个不同的显示...为了解决MVC框架中View和Model联系紧密的问题,开发者研究开发了MVP模式MVP即Model-View-Presenter,即把MVC中的Controller换成了Presenter,目的就是为了完全切断...在MVP框架中,View无法直接再与Model交互,View和Model之间的通信都是通过Presenter进行完成的,所有的交互都在Presenter内部发生,即由Presenter充当了View和Model...[^4] Presenter与View也是没有直接相关联的,而是通过已定义的接口进行交互,从而使得在变更View的时候可以保持Presenter的不变,即保证了Presenter的可重用性(接口的复用性...[^5]也不像MVP, 这里的Controller可以控制View来实现路由。即前后后端没有分离,但是将原来的View的构建了。

77600

页面结构化在Android上的尝试

导语 :MVP开发模式可以帮助项目结构,但其庞大的方法数增加,较为笨重设计对于手Q项目并不很适合。参考之前Web开发经验,提出以页面结构化的方式组织代码。...先来看看MVP模式的核心思想:View不直接与Model交互 MVP 把 Activity 中的 UI 逻辑抽象成 View 接口,把业务逻辑抽象成 Presenter 接口,Model 类还是原来的...Model 在MVP设计模式中, View:由Activity充当,并且响应生命周期 Model:还是原来的数据层,网络,缓存,解析等。...,绝对的。不然抽这么多接口干嘛 2. 模块职责明确,层次清晰 3. Presenter可复用(在日迹的需求中,首页和4Tab公用一个Presnter) 4. 方便单元测试 5....,代码可读性高,底层统一优化 在使用了两个版本之后,感觉完成度还是不够。 1. 顶层Lego情况复杂,底层统一优化不好做 2.

1.3K60

MVP模式从入门到精通

网上搜下一大堆MVP的各种好处,本人总结下主要有以下几点: 代码 结构清晰 可复用 扩展性高 方便进行单元测试 在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC...而且,Presenter与具体的View是没有直接关联的,而是通过接口进行交互,从而使得在变更View时候可以保持Presenter的不变,可以多次复用。...在MVP里,应用程序的逻辑主要在Presenter来实现,其中的View是很薄的一层,只应该有简单的Set/Get的方法,用户输入和设置界面显示的内容,除此就不应该有更多的内容,绝不容许直接访问Model...里面这样一来遇到频繁改需求或者逻辑越来越复杂的时候,Activity /Fragment里面就会出现过多的混杂逻辑导致出错,所以MVP模式对于APP来对控制逻辑和UI的来说是一个不错的选择。...我们可以直接Presenter写Junit测试 最后:这个MVP模式是非常基础了,只是给大家提供一下这个思路。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

60810

(转) 对MVC、MVP、MVVM的理解

刚开始理解这些概念的时候认为这几种模式虽然都是要将view和model,但是非此即彼,没有关系,一个应用只会用一种模式。...实际上也根本没必要去纠结自己到底用的是MVC、MVP还是MVVP,不管黑猫白猫,捉住老鼠就是好猫。...Controller接收View的操作事件,根据事件不同,或者调用Model的接口进行数据操作,或者进行View的跳转,从而也意味着一个Controller可以对应多个View。...在实际的应用中很有可能你已经在不知不觉中将几种模式融合在一起,但是为了代码的可扩展、可测试性,必须做到模块的,不相关的代码不要放在一起。...在开发深入之后,可以再体会用到的框架到底是MVC、MVP还是MVVM。 上面如有错误,敬请指出,谢谢。

94460

关于 MVVM和MVC的一些总结

在MVC框架中,View是可以直接访问Model的(JSP里直接使用JavaBean),这样不可避免的使View里面也需要包括一些业务逻辑,同时还需要Model保持不变,而Model又对应着多个不同的显示...在MVP框架中,View无法直接再与Model交互,View和Model之间的通信都是通过Presenter进行完成的,所有的交互都在Presenter内部发生,即由Presenter充当了View和Model...Presenter与View也是没有直接相关联的,而是通过已定义的接口进行交互,从而使得在变更View的时候可以保持Presenter的不变,即保证了Presenter的可重用性(接口的复用性),同时也解决了...5也不像MVP, 这里的Controller可以控制View来实现路由。即前后后端没有分离,但是将原来的View的构建了。...首先,MVVM框架中的View完全可以独立于Model发生变化和修改,彻底,View发生变化时Model可以不变,同样,当Model发生变化时View也可以不变化,并且一个ViewModel可以绑定到多个不同的

2.6K30

干货 | MVP模式在携程酒店的应用和扩展

因此有必要将View和Model进行,而MVP的主要思想就是View和Model。由此引入MVP就显得很自然。...: · 面向接口 · View -Model · Activity角色转换 就目前了解到的情况来看,很多采用MVP模式的应用基本上和android参考实现方案差别不大,说明该模式的应用场景也是很广泛的...2.2、Android MVP存在的问题 尽管已经有了大量的应用,但不可否认该模式还是存在一些问题,这些问题在携程的使用过程中也得到了体现。...可以归纳为: · 业务复杂时,可能使得Activity变成更加复杂,比如要实现N个IView,然后写更多个模版方法。 · 业务复杂时,各个角色之间通信会变得很冗长和复杂,回调链过长。...和数据绑定的作用,所负责的控件的上的业务还是有Controller决定如何去处理。

943110

【Dev Club分享】基于RxJava的一种MVP实现

MVP则通常用来将View业务层与Model层分离开来,两者结合起来可轻松实现业务、线程控制、单元测试等等强大功能 内容大体框架: Android开发框架的选择 如何一步步搭建MVP分层框架 使用RxJava...两个方法最终要实现的都是。分层讲的是纵向层面上的,模块化则是横向上的。 我们今天要讨论的MVP就是一种通过分层来进行的框架。 2....类似的应用场景其实有非常非常多,这里我们就看到了使用接口的一个好处了,不仅把业务层和展示层开来,还把Android开发同其它的一切的外部数据依赖都开来。...Q6:需求包含列表页的时候,列表项也是按照mvp的思想来分层,还是封装成模块比较合适 目前我们的做法是直接封装成模块,简单的问题不宜过度设计 Q7:想问一下腾讯动漫这个app目前用的就是您讲的这个架构吗...感谢 价值在于,把presenter 与activity之后,我可以在别的activity使用这个presenter层逻辑,也可以在这个activity 里调用其它页面的presenter方法。

93870

聊聊基于MVP 模式下的软件设计

,这样就实现了业务逻辑和UI。...如果我们要编写单元测试的话, 只需要Mock一个对象实现Presenter提供的接口就好了。MVP模式较好地解决了UI和逻辑的。...这个问题可以通过类别扩展或者通过面向接口编程的方式实现代码的分散管理。 通信方式 1. 当视图接收到来自用户的事件时,会将事件转交给 Presenter 进行处理; 2....NSLog(@"返回结果%@",result); } 上述是一个MVP模式下的登录功能的全部代码,我们可以看到网络请求是放在 M层的这点和 MVVM中是不一样的,基本可以看到是通过...---- 参考文章: MVP PATTERN IN IOS iOS - 基于面向协议 MVP 模式下的软件设计 -- 架构设计 基于面向协议MVP模式下的软件设计-(iOS篇) 再谈MVP模式

59310

关于Android中MVVM,MVC和MVVM的那些事

2)须手动或通过观察者模式进行多视图更新。 3.MVC缺点? 1)Controller测试困难。Controller不知道任何View的细节,一个Controller能被多个View使用。...4.。 3.MVP缺点? 1.维护比较困难。  ...隔离了MVC中的 M 与 V 的直接联系后,靠 Presenter 来中转,所以使用 MVP 时 P 是直接调用 View 的接口来实现对视图的操作的,这个 View 接口的东西一般来说是 showData...在实际的应用中很有可能你已经在不知不觉中将几种模式融合在一起,但是为了代码的可扩展、可测试性,必须做到模块的,不相关的代码不要放在一起。...在开发深入之后,可以再体会用到的框架到底是MVC、MVP还是MVVM。

1.4K30
领券