プロパティ変更とエラー情報の通知 (概念編)

先にプロパティ変更とエラー情報の通知 (実装編) を投稿しましたが、
今回は通知のプログラミング手法について概念的に考えてみます。

まず、従来のいわゆる手続き的なプログラミング手法の場合で、次のようなコードがあったとします。

try
{
    // ある処理を実行する

    // ある処理の実行が完了した場合の処理
}
catch (Exception) // エラーが発生する
{
    // エラーが発生した場合の処理
}

この手続きの中に現れる処理を、観測者と被観測者の 2 つのオブジェクトに役割を分担させるように変更します。
そのためには、被観測者側のコードを次のようにします。

try
{
    // ある処理を実行する

    // ある処理の実行が完了したことを観測者に通知する (通知後の処理は観測者が知っている)
}
catch (Exception) // エラーが発生する
{
    // エラーが発生したことを観測者に通知する (通知後の処理は観測者が知っている)
}

ある処理を被観測者側で実行し、それが完了したら観測者に通知します。
観測者はその通知をトリガーとして何らかの処理を実行します。

これが Observer パターンで、この Wikipedia に載っている図と同様にクラス図を作ると次のようになります。

Observer パターン

 

通知後の処理を関数として渡せるようにするには、プログラミング インターフェイスを次のように変形します。

Observer パターン

 

.NET の場合、イベントを利用することができます。

Observer パターン

 

.NET ではとくに、データのエンティティなどに適用できるインターフェイスとして
INotifyPropertyChanged, INotifyDataErrorInfo が用意されており、
XAML 系テクノロジのデータ バインディングでは、これらを利用してプレゼンテーション層とモデル層における関心事を分離します。
つまり、アプリの本質的なロジックをモデル層に集中させ、プレゼンテーション層は同期的に追従して UI を更新する、
といったプログラミング スタイルを実現できます。

なお、プログラミング インターフェイスの変更については、
Reactive Extensionsの概要と利用方法にも同様の議論が記載されています。

参照
プロパティ変更とエラー情報の通知 (実装編)
Observer パターン
Reactive Extensionsの概要と利用方法

コメント / トラックバック1件 to “プロパティ変更とエラー情報の通知 (概念編)”

  1. プロパティ変更とエラー情報の通知 (実装編) | Do Design Space Says:

    […] Observer パターンの活用例の 1 つです。 Observer パターンについては、プロパティ変更とエラー情報の通知 (概念編) […]


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。