侧边栏壁纸
  • 累计撰写 62 篇文章
  • 累计创建 35 个标签
  • 累计收到 8 条评论

目 录CONTENT

文章目录

3.23 周一 软件架构 回顾+2.5节 事件系统风格

生榆
2020-03-23 / 0 评论 / 0 点赞 / 547 阅读 / 3013 字
温馨提示:
本文最后更新于 2022-12-14,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

回顾

管道-过滤器

  1. 构件:过滤器、处理数据流
  2. 连接件:管道
  3. 拓扑结构:

应用:线性管道-过滤器风格到KWIC

  1. 4个过滤器:输入、移位、排序、输出
  2. 每个过滤器处理数据,将结果送到下一个过滤器
  3. 控制机制:分布式,只要有数据传入,过滤器就开始工作
  4. 过滤器之间的数据共享被严格限制
  5. 没有master来作为总程序进行控制,每个过滤器都是独立的
  6. 不同的对象之间没有直接耦合

2.5 事件系统风格

  1. 显示调用
    • 各个构件之间的互动是显式的由调用函数或过程完成的
    • 调用的过程与次序是固定的
  2. 隐式调用
    • Event Source 事件源 广播一些事件
    • Event Handlers 其他构件可以注册自己感兴趣的事件,并将自己的某个过程与相应的事件关联
    • Event Manger 当一个事件被发布,系统自动调用在该事件上注册的所有过程

特点

事件的触发者不知道哪些构件会被这些事件影响,相互独立

基本构件

构件:对象或过程,并提供两种接口:

  1. 一组过程/函数,充当事件源或处理器
  2. 事件

连接件:事件-过程绑定

  1. 事件处理器
  2. 事件源构成发布事件
  3. 某些事件被发布时,向其注册过的过程被隐式调用
  4. 调用的次序是不定的

注:连接件也可以是事件-事件绑定

调试器例子

  • EventSource : debugger

  • EventHandler: editor and variable monitor

  • EventManager: IDE

  • 编辑器与变量监视器向调试器注册,接收“断点事件”

  • 一旦遇到断电,调试器发布事件,触发“编辑器”与“变量监测”

事件调度策略

  • 非集中式(无独立的)调度模块的事件管理器(即:分布式的)
  • 带有独立调度模块的

无独立模块的

Observable/Observer
G8TxL8.md.jpg]

事件调度模块?

  1. 全广播:将事件广播到所有模块,只有感兴趣的才触发行为
  2. 选择广播:只讲事件发送到注册了的模块中

选择广播的两个策略

  • 点对点(基于消息队列)
    1. 只能被一个人处理
  • 发布-订阅模式
    1. 订阅者向“主题”订阅事件——一个事件可以被多个订阅者消费
    2. 事件在发送给订阅者后,并不会马上从topic中删除,topic会在事件过期之后自动删除

KWIC案例:事件驱动风格

特点

  1. 支持实现交互式系统(用户输入/网络通信)
  2. 异步执行
  3. 软件复用强大支持——解耦
    • 当需要将一个构件加入现存的系统中时,只需要将它注册到系统的事件中
  4. 系统动态演化
  5. 事件并发处理
  6. 健壮性:一个构件出错了不会影响其他构件

缺点

  • 使系统的同步、验证、调试比较困难
    • 传统的基于先验和后验变得不可能
  • 数据交换:存在调度,带来性能问题

小结

G87pdg.md.png

0

评论区