事件驅動編程:為什麼現在流行?
已發表: 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 肯定會在消費者社區中保持高度流行的編碼選項,希望從他們使用的軟件中獲得更多的定制和個性化。
