1616前端App框架设计思路的变迁——观察者模式由拉转向推
观察者模式又分为“推”和“拉”两种模式。
从日常生活举例说明:订报纸。报商给我们送上门来,这是推模式;我们自己上报亭取,这是拉模式。
从代码上二者的区别举例说明: 拉模式是当通知来之时,通知的函数不带任何相关的信息,而是要订阅者主动去“拉”信息; 推模式是当通知来之时,把所有相关信息都通过参数的形式“推给”订阅者。可以参见下图加以理解。假定:App是消息订阅者,SubjectBase和Subject是消息制造者,Observer是中间观察者。
老框架App之间进行交互很困难,需要在框架端扩展很多自定义事件,然后其他App去实现事件响应函数。如果采用老框架,自定一个事件很费劲,首先需要修改上图旧框架里的notify()实现,然后App要实现自定义事件的响应函数,还要做事件容错处理(有些App没有实现事件响应函数),也即框架和具体App两处都要开刀。
经过一番需求演化之后,App也具备了Subject的“发布通知”的能力,也即“任何APP可以发出通知,可以侦听自己感兴趣的消息”,最终演化成下图。
是不是简单多了?这种思想最终也有利于自定义App事件的方便,方便App之间进行交互,比如App1想定义一个事件,App2想侦听App1的这个事件,只需要App2.listen("自定义事件1"),然后App1.notify("自定义事件1","附加数据")即可。这样所有的修改都放到了具体App这边,1616作为一个即将开放的App平台,把自主权下放给App开发人员应该是明智的方向。当然“自定义事件1”这个事件名是两个App约定好的。否则事件名不对,不会响应,这是需要注意的。
一般来说,推模式可以更多地减少耦合,维护上方便改动较小,但缺点是不管信息有用没有都推给了App。然而,前端通过javascript通信,推模式传递冗余的信息所占用的开销几乎可以忽略不计了,因为javascript程序运行在用户本机,传输速度是相当快的。
本博客所有随笔版权归博客园和kai.ma所有,欢迎转载,转载请保留:
- 出处:http://kaima.cnblogs.com
- 作者:kai.ma
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述