【初心者用】イベントドリブンモデルについてまとめてみた

仕事で使うことになったASP.NETを勉強していて、「イベントドリブンモデル」という単語が出てきて「何それ?」となったので、メモがてらまとめてみました。

当記事では、

・イベントドリブンとは何か(ざっくりと)

・細かく説明したらどんなものなのか

・プログラミングの形としてはどうなるのか


について説明していきます。

ガリガリと専門用語を噛み砕きながら書いていくので、プログラミング経験者にはやや冗長気味かもしれませんが、タイトル通りプログラミング初心者にも分かりやすい内容になるかと思います。

1. ざっくり表現すると

イベントドリブンモデルとは、ざっくり説明すると、 「何かしらの「イベント」が発生した際に処理を行わせる方法」 のことです。

イベントドリブン型、イベント駆動型とも呼ばれますが、どれも大体一緒と考えてしまって構いません。

綴りとしては Event(イベント、出来事)Driven(駆動) なので、名前のそのままとなりますね。

これだけだとざっくりしすぎて分かりにくいので、次項で細かく説明していきます。

2. ちょっと細かく説明すると


イベントドリブンモデルの「イベント」とは、システム上での意味のあるコントロールの操作や、状態の変化のことです。

ここでのコントロールとは、ユーザーが操作するボタンやドロップダウンリスト、テキストボックスなどの「制御可能なモノ」と考えればいいです。

それらを操作するということは、簡単な例としては、

・ボタンをクリックする

・ドロップダウンリストから選択する

・テキストボックスを入力する

・チェックボックスをクリックする


といったようなことですね。

ちなみにこれは、画面が表示された際の初期動作なども含まれます。


それらを行われることで、「クリックされた」「選択された」「入力された」とシステム側に認識されます。

イベントドリブンモデルとは、このようなイベントが発生した際に、イベントの種類に応じて処理が実行されるようなプログラミングの仕組みを指します。


このイベントドリブンモデルを採用することで、ユーザーの操作に応じた動的なフォームの開発が可能になります。


具体的な例を挙げてみましょう。


Webページ上で、住所を入力するページがあるとします。

手入力ではなく、ドロップダウンリストを採用し、「都道府県」「市区町村」に分けておきます。

都道府県だけでも47と多いですが、市区町村となるとその何倍もの量となり、都道府県が入り混じった状態のそれらのリストから目的のものを探すのは一苦労です。


その解決策の一つとして、イベントドリブンモデルを使ってみます。


まず、ページを開いた当初は、「市区町村」のリストの中を空っぽにしておきます。

それから、ユーザーが「都道府県」をリストから選択させます。

すると、「選択した」というイベントが発生します。

そのイベントで、「市区町村」のドロップダウンリストに、選択した都道府県に属したもののみを表示、選択できるようにします。


このようにすることで、ユーザー側は確認する市区町村の数はだいぶ減り、探しやすくなるでしょう。

これは単なる一例に過ぎませんが、「必要な時に」「必要な処理」を行わせることができるこの方式を採用することで、サービスの種類によりますがユーザー側が操作しやすくなったり、開発や運用の効率化を図ることができるようにあります。

3. プログラム上では

前項では簡単な仕組みとしての話をしたので、ここでは技術的というか、どんな形でプログラミングをしていくかの話をしていきます。


まず、前項でお話ししたイベント発生時に実行されるプログラムコードを「イベントハンドラー」と言います。

イベントドリブンモデルにおける開発者は、「Aのボタンが入力されたら〇〇する」「Bのテキストが入力されたら□□する」といったような様々なイベントハンドラーを記述することで、入力やクリックで反応するアプリケーションやWebフォームを開発していく形になります。

具体的に説明すると、

①ページ入力時の処理
(各項目の初期化等)

②ドロップダウンリストの選択時やテキスト入力時の処理
(Webページでユーザー情報の登録の時などに、入力ごとにチェックを行う等)

③ボタンを押したときなどの画面内や次画面への切り替わり


といったもの等があります。

4. 対となるモデルと比較した際の利点

当記事ではイベントドリブンモデルを挙げていますが、これを「モデルの一つ」として挙げているからには、必然として他のモデルもあることになります。

「リクエスト・リプライ方式」「フロー型プログラミング」と呼ばれるものです。


こちらは、「全体として一つの「流れ」(フロー)があり、そこからのリクエストによってそれぞれの処理が行われる手法」 となります。


イベントに応じて枝分かれするイベントドリブンモデルとは対照的に、主体となっているのはあくまで「一つ」なのがポイントです。

そちらでは、メインとなっている処理以外は、「特定の処理を行うための道具」として利用され、一度にすべてが、順番に流れることになります。

(順番に、と言っても、条件式などで一部工程のスキップやループなどは可能です)


利点としては、イベントごとに行われるイベントドリブンモデルに対して「一定の流れ」がある分、「どの処理をいつ実行するか」という順番を開発者側が決めることができるため、プログラミングの難易度は低いと言えます。

反面、毎回すべての処理を実行することになるために、無駄が出やすいという欠点もあります。


イベントドリブン型は、「どの処理をいつ実行するか」を開発者側で決められない分、「処理を実行する順番」を制御できず、それらを考えたうえプログラミングを行わなければいけないので難易度が上がってしまうという点があります。


ですが、前項でも少し述べましたが、「必要な時に」「必要な処理を行う」ということができるため、リソースの浪費を減らすこともできます。

また、開発者側は行いたい処理を記述するだけでいいうえに、イベントハンドラーごとに処理が分かれているために、プログラムの見通しがよくなるという利点もあります。

5. 最後に

データフロー型を交えつつ、主題であるイベントドリブンモデルについて説明しましたが、どちらだけが絶対的にいいとは言えず、一長一短です。

場合によって最適な方を選んでいくのがいいでしょう。