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

Unity应用架构设计(2)——使用中介者模式解耦ViewModel之间通信

那么如何保证在复杂业务情况下,各个子模块之间可以随意通信并保持弱耦合关系,这正是本文所讨论的。 耦合的产生 试想一下,你有这样一下需求,点击 View A中的按钮,View B也需要做出相应的改变。...每个View/ViewModel依赖其余对象,而本身又被其他View/ViewModel强引用。这显然不是好的实践方式。 还记得我在上一篇文章的对于MVVM的描述吗?...MVVM的核心思想就是解耦,View与ViewModel应该感受不到彼此的存在。ViewModel与ViewModel之间也应该感受不到彼此的存在。...中介者模式的引入 那么如何消除这种紧耦合关系呢?交给中介者设计模式来解决吧。 我们需要添加一个中介者,每个ViewModel Publisher对象都会在自己状态改变时,告诉中介者。...小结 中介者模式常常用来协调相关的GUI组件,可以让对象之间传递的消息变得简单。但如果设计不当,中介者本身会变得过于复杂。 源代码托管在Github上,点击此了解

1.4K100
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Jetpack:ViewModel

    1.引入背景 引入ViewModel之前,存在如下几个问题: (1)有的时候一个Activity里面嵌套了多个fragment,但是这些fragment里面用的是同一个数据,为了同步这些数据,我们需要用接口来传参...(2)屏幕旋转,会销毁重建,如果数据类型比较简单,同时数据量也不大,可以通过onSaveInstanceState()存储数据.但如果是大量数据,不方便序列化及反序列化,则上述方法将不适用. 2.ViewModel...的使用 (1)gradle中引入 implementation 'android.arch.lifecycle:extensions:1.1.1' (2)新建ViewModel实体类 public class...UserModel extends ViewModel { String name; int age; } (3)获取ViewModel UserModel model = ViewModelProviders.of...点进去看就知道是HashMap 4.总结 ViewModel说白了就是内部生成一个fragment来管理生命周期,同时用HashMap保存数据,相对简单.它和LiveData以及Lifecycle组合使用会更好

    69420

    Android Jetpack - ViewModel

    ViewModel 简述 ViewModel 旨在以生命周期感知的形式存储和管理 UI 控制器(Activity/Fragment 等)相关的数据,可以解决 UI 控制器中数据无法正确保留以及数据在其复杂的生命周期中难以维护的痛点...ViewModel ?...我用一个非常简单的 Demo 来展示它的基础用法,通常我们为 app 集成 ViewModel 遵循如下几个步骤: 1、创建一个继承 ViewModel 的类来分离出 UI 控制器中的数据 2、建立 ViewModel...和 UI 控制器之间的通信 3、在 UI 控制器中使用 ViewModel 1、创建 ViewModel 创建 MainActivityViewModel 并继承 ViewModel class MainActivityViewModel...= _startTime } 2、关联 UI 控制器和 ViewModel UI 控制器必须知道自己和哪个 ViewModel 进行关联,这样它才能知道去哪里取回数据,注意,不要在 ViewModel

    87920

    Jetpack系列——ViewModel

    我们应该将项目结构进行分层,传统的MVC,MVP和MVVM,都是将项目结构分了三层,“各管一摊”,这三种模式各有特点、各有利弊,但它们都有一个共同点,就是区分出了M层与V层,M即Model层,V即View...其中,MVVM模式除了M层和V层之外,就是VM层,即ViewModel。...为了证明Activity在执行各生命周期时,ViewModel并不会随之变化,所以我们可以在ViewModel中使用Handler或者RxJava做一个定时循环任务,观测Activity是否会影响ViewModel...> mMap = new HashMap(); final void put(String key, ViewModel viewModel) { ViewModel oldViewModel...但如果ViewModel中必须要用到Context怎么办呢,可以将ViewModel类继承自AndroidViewModel,AndroidViewModel继承自ViewModel,并且接收Applcation

    64310

    LiveData beyond the ViewModel

    这篇博文将帮助你避免陷阱,并使用一些模式来帮助你使用LiveData构建一个更加「反应式」的架构。...LiveData被设计用来实现观察者模式,允许视图控制器(Activity、Fragment等)和UI数据的来源(通常是ViewModel)之间进行通信。...通过LiveData,这种通信更加安全:由于它的生命周期意识,数据只有在View处于Activity状态时才会被接收。 简而言之,其优点是你不需要在View和ViewModel之间手动取消订阅。...每当资源库有新的数据时,ViewModel只需对其进行映射即可。...LiveData被设计为允许视图观察ViewModel。一定要把它用在这上面! 即使你已经使用了Rx,你也可以用LiveDataReactiveStreams进行通信。

    1.5K30

    ViewModel 和 LiveData:为设计模式打 Call 还是唱反调?

    ❌ 避免在 ViewModel 里持有视图层的引用 推荐使用观察者模式作为 ViewModel 层和 View 层的通信方式,可以使用 LiveData 或者其他库中的 Observable 对象作为被观察者...ViewModel 如何与其他组件进行通信取决于你,但要注意泄漏问题和边界情况。看下面这个图,其中 Presenter 层使用观察者模式,数据层使用回调: ?...UI 中的观察者模式和数据层中的回凋 如果用户退出 APP,视图就消失了所以 ViewModel 也没有观察者了。...使用 LiveData 在数据仓库和 ViewModel 中通信。就像 View 和 ViewModel 之间那样。 ✅ 考虑边界情况,泄漏以及长时间的操作会对架构中的实例带来哪些影响。...一些通用的模式是这样的: 为 ViewModel 添加 start() 方法,并尽早调用这个方法。

    3.1K30

    Andorid-JetPack-ViewModel组件

    其实就是ViewModel实例被保存了下来,页面重建之后获取的ViewModel是同一个 2.基本用法 常规用法:存储的数据,仅仅只能当页面因为配置变更导致的销毁再重建时可复用,复用的是ViewModel...复用实现原理 准确点来说,应该是ViewModel如何做到在宿主销毁了,还能继续存在.以至于页面恢复重建后,还能接着复用 肯定是前后获取到的是同一个ViewModel实例对象 我们先来看下获取ViewModel...> mMap = new HashMap(); final void put(String key, ViewModel viewModel) { ViewModel oldViewModel...ViewModel viewModel = mViewModelStore.get(key); //2.判断viewModel该实例是不是我们传入的modelClass...(T) viewModel; } } 当调用get()方法的时候,我们只是传递了一个ViewModel的.class对象,就会把我们ViewModel的className名字拼接上DEFAULT_KEY

    1.8K30

    【Jetpack】ViewModel 架构组件 ( 视图 View 和 数据模型 Model | ViewModel 作用 | ViewModel 生命周期 | 代码示例 | 使用注意事项 )

    文章目录 一、Activity 遇到的问题 二、视图 View 和 数据模型 Model 三、ViewModel 架构组件作用 四、ViewModel 代码示例 1、ViewModel 视图模型 2...与 数据模型 实现了 解耦 , 同时 还能保证 视图 与 数据模型 之间 保持 通信 ; 这样 Activity 的代码量减少了 , 只需要维护 视图 View 相关内容 , 增加了代码的可维护性 ,...---- 1、ViewModel 视图模型 ViewModel 视图模型 继承 androidx.lifecycle.ViewModel 类 , 在其中定义要维护的数据即可 ; 代码示例 : package...关联时 , 开始绑定 ViewModel , Activity 组件中 绑定 ViewModel 代码如下 ; // 获取 ViewModel myViewModel...---- ViewModel 使用注意事项 : 使用 ViewModel 时 , 不要将 Context 上下文对象传入 ViewModel 中 , 否则会导致内存泄漏 ; 如果要使用 Context

    87220

    SAP RFC通信模式详细解析

    在网络技术中,数据通信可以大致划分为两种基本模式:同步通信和异步通信。 其本义是:异步通信时,通信双方时钟允许存在一定误差;同步通信时,双方时钟的允许误差较小。...在SAP的系统间的通信过程中,也借用术语同步通信和异步通信,但其主要差异在于调用系统是否需要立即接受返回结果。这两种通信模式各有局限性,不同的应用适用于不同的通信模式。...异步通信的优点是不需要接收系统随时可用,如系统维护、升级等情况均不影响请求发送系统的业务处理;但该模式不适用于要求即时响应的处理过程。...图二 SAP中的异步通信 以上述两种基本通信模式为基础,SAP系统中的RFC过程扩展为以下几种不同的模式。 1....同步RFC 同步RFC(sRFC,synchronous RFC)是RFC的最原始版本,其执行基于同步通信模式,远程调用时,通信双方的系统必须均可用,调用程序等待远程功能处理结束并返回结果。

    1.4K31
    领券