事件驱动编程:为什么现在流行?
已发表: 2019-09-17事件驱动编程 (EDP) 正在改变软件开发服务的世界,并成为当今开发的重要组成部分。 Windows 和可视化 RAD 环境的传播刺激了它的传播。 顾名思义,编程方法侧重于事件。 后者可能是用户启动的、系统的和程序生成的。 如今,EDP 应用程序最常见的领域包括 GUI 创建、服务器应用程序和多人游戏开发。
与控制用户选项和预先确定事件流的旧式程序不同,更具适应性和创新性的编程带有图形用户界面 (GUI)。 GUI 以下拉菜单、窗口、按钮和复选框的形式为用户提供多种选项,从而改变了人机交互。 因此,用户不再遵循计算机设定的预定操作顺序,而是能够自己选择许多可用命令中的一个。
什么是事件驱动编程? 今天是如何实施的? 它为编码人员、企业和最终用户提供了哪些优缺点? 这种软件开发方法有哪些可用示例?
阅读我们与 LitsLink 联合创建的这份综合指南,找到您可能感兴趣的所有内容。
- 什么是事件驱动编程?
- 事件处理作为EDP的核心
- 事件驱动应用程序的特性
- 事件驱动编程语言
- 事件驱动编程的优点
- 事件驱动编程的缺点
- 事件驱动编程示例
什么是事件驱动编程?
传统的编程是线性的并且基于执行流,操作运行固定的跨度或直到达到预先编写的决策点,而事件驱动的编程则由某些事件触发(例如,单击鼠标,按下某些键)在键盘上,从下拉菜单中选择一个选项)。 这种类型的编程最常见于具有图形用户界面 (GUI) 的程序。 如果使用它,程序会等待事件发生然后响应。
让我们处理一些介绍性术语,以便更好地了解 EDP。
- 事件:事件是在程序的生命周期中出现的一种情况,需要运行时系统采取一些行动。 事件的性质不同。 其中一些要求程序检索和显示某些信息。 其他人发起一些计算并改变状态。
- 消息:消息是表示运行时事件的数据结构。 它提供有关事件类型和程序处理它所需的参数的信息。
- 事件处理程序:事件处理程序是程序中被激活以对事件作出反应的某个单元。
- 消息循环:它是一种轮询算法,用于通过持续检查消息队列并将流量路由到事件处理程序来实现 EDP。
为您推荐:在 Apache Spark 中使用 Scala 的初学者指南。
事件处理作为EDP的核心
事件处理构成了 EDP 的基础,并将此编程范例与其他范例区分开来。 遵循 EDP 基本原理的程序操作由预定事件、硬件事件、操作系统事件、语言运行时事件以及由通过与程序 GUI 交互提供的用户指令触发的事件启动。 程序员在软件开发期间以事件处理程序的形式指定这些操作。 从最简单的意义上讲,编码人员必须回答这个问题,“当特定事件发生时应该发生什么?”
最基本的 EDP 模型是硬件模型。 它假定中央处理单元的操作被需要其响应的任何外部刺激中断。 在这种情况下,原始中断处理程序对事件的处理很少,而操作系统的高级功能保持不变。 然而,这个模型非常原始,没有消息队列,而现代 ODP 系统的功能不同。
回调函数是软件工程中最古老的事件处理工具之一。 它是一种基于中断向量表模型的EDP过程模型。 回调函数有预先确定的接口,根据事件类型的不同可能略有不同。 事件类型是运行时计算事件在回调表中的位置的小整数。 消息循环在发现与该事件类型对应的队列头部的消息时调用回调函数。 对于要在 EDP 流程中执行的功能,执行此操作的编程语言应提供一种将事件与特定回调函数相关联的方法。
事件驱动应用程序的特性

基于事件的应用程序各不相同,具体取决于它们的用途和功能。 然而,它们都必须具备一组通用的特性,例如:
- 事件的抽象通常作为 monad 显式提供;
- 事件同步能力;
- 回调形式的延续传递式实现;
- 原始事件的来源。
事件驱动编程语言
可以用任何现代编程语言创建事件驱动程序,而 Visual Basic、Visual C++ 和 Java 特别适合此目的。 例如,可视化编程语言 Visual C++ 和 Visual Basic 配备了集成开发环境 (IDE) 套件,其中包含许多标准控制选项、事件和事件处理程序代码模板。 Python 也被用作合适的 EDP 工具。
您可能喜欢:编程简介:Node JS、Laravel、React、Ruby、Vue 和 Python 简介。
事件驱动编程的优点
这种软件编码方法对所有利益相关者都具有众多优势。 与控制台应用程序相比,它需要更少的编码决策。 许多事件是由用户操作决定的,而不是预先编码所有可能的场景。 当基于控制台的应用程序起作用时,事件驱动的应用程序会做出反应。 其次,它消除了输入无效值的可能性。 基于控制台的应用程序提出问题并允许用户键入答案。 基于事件的应用程序通常以按钮或下拉菜单的形式提供一组选项。
ODP 非常适合最近的软件工程趋势,例如云计算、微服务以及对灵活的分布式系统增强可扩展性的需求。 ODP 的使用消除了在添加或删除某些模块时更正和调整现有代码的需要。 无论此类调整如何,ODP 系统都会继续完美运行。 因此,程序员称赞 ODP 范例直观且非常适合具有基于复杂的内部和外部事件而非结构的控制流的应用程序。 ODP 的其他好处包括:
- 使用面向对象编程作为其基础;
- 更好的软件设计成果;
- 生成的程序具有更好的响应能力和灵活性;
- 由于跨多个处理器和事件处理程序的数据传播,处理速度更快;
- 改进的应用程序可扩展性;
- 更好的松耦合。
事件驱动编程的缺点
基于事件的编程最常被提及的缺点之一是复杂的控制流和手动堆栈管理。 由于这些缺点,这种编码方法不是简单的小型应用程序的最佳选择,因为这种努力是不合理的。
此外,应该记住,事件驱动编程不会取代传统的结构化编程,而只是对其进行补充。 传统的编程技术对于编写实际程序仍然至关重要,而事件驱动的编码元素可能有助于设计 GUI。
ODP 的灵活性是其无可争辩的优势,但在某些情况下也会变成缺点。 这些表现之一是 ODP 程序在发生变化时的不可预测性和对整个系统的控制较弱。 虽然编码人员喜欢 ODP 进行无摩擦调整,例如,删除或添加某些功能模块,但这些调整可能会导致功能出现意想不到的变化。 在传统的编程中,系统会立即检测到此类功能异常,并向编码人员提供有关其原因的报告,而在 ODP 环境中,检测此类功能异常的速度更慢且更复杂。
您可能还喜欢: Elixir 编程语言的优缺点。
事件驱动编程示例
事件驱动程序如今已变得非常普遍。 最流行的例子包括文字处理、绘图工具包、电子表格等。大多数现代消息系统也遵循事件驱动模式,而大型网站则使用可扩展的、事件驱动的分布式架构。 ODP 还在现代多任务操作系统和各种编程框架中占有一席之地。 凭借这些优势以及高度直观和灵活的调整,ODP 肯定会在希望从他们使用的软件中获得更多定制和个性化的消费者社区中保持高度流行的编码选项。