連載

アプリケーション・アーキテクチャ設計入門

第2回 論理アーキテクチャを構成するコンポーネントの設計(プレゼンテーション層編)

日本ユニシス 猪股 健太郎
2003/10/04

Page1 Page2 Page3

■ユーザー・プロセス・コンポーネント

 ビジネス・プロセスを1つ実行するに当たって、一定の手続きに沿ってユーザーとシステムとのやりとりが繰り返される場合がある。そのような手続きを「ユーザー・プロセス」と呼ぶ。順序に沿ってユーザー・プロセスを制御したり、複数のユーザー・インターフェイス画面を表示するときにユーザー・プロセスの状態を正しく管理したりするのであれば、ユーザー・プロセスを制御するロジックを隠ぺいしたクラスとして「ユーザー・プロセス・コンポーネント」を作成するとよい。

 ユーザー・インターフェイス・コンポーネントとユーザー・プロセス・コンポーネントを分離するメリットには、長期にわたるユーザー・プロセスを中断・再開しやすいことと、複数のユーザー・インターフェイスでユーザー・プロセスを再利用できることがある。従って、以下のような場合であればユーザー・プロセス・コンポーネントを使うべきである。

  • ユーザーが複数のWebフォームを開いたり、ブラウザを複数起動したりして、同時に複数の処理をする場合

  • WebのフレームやWindowsアプリケーションのダイアログなど、1つの処理に複数の画面を使う場合

  • 長期にわたるユーザー・プロセスをビジネス・プロセスから独立させる場合。例えば、注文処理に中断・再開の機能を付ける際に、完了していない注文はビジネス層では扱いたくない場合など

ユーザー・インターフェイス・コンポーネントとユーザー・プロセス・コンポーネント
この2つを分離するメリットは、長期にわたるユーザー・プロセスを中断・再開しやすいことと、複数のユーザー・インターフェイスでユーザー・プロセスを再利用できることである。
 

ユーザー・プロセス・コンポーネントの特徴

  • トランザクションを開始しない。トランザクションに参加したり投票したりもしない

  • ビジネス・ロジックに関連する内部データとユーザー・プロセスの内部状態を保持し、必要に応じて永続化する

  • 個々のステップとして遷移する画面は、コードに直接書くか、構成ファイルなどのメタデータから動的に取得する

  • 内部データを初期化させるために、ビジネス・コンポーネントやデータ・アクセス・ロジック・コンポーネントを呼び出してもよい

  • メニューを管理するカスタム・ユーティリティ・コンポーネントから開始されてもよい

 

ユーザー・プロセス・コンポーネントの役割

 ユーザー・プロセス・コンポーネントは以下のことを実現するために使用する。

  • ユーザー・インターフェイスの構成要素を、データフローや制御ロジックを変えずにインタラクション(ユーザーとのやりとり)の順序制御に対応付ける

  • ユーザー・インターフェイスのセッションを、関係するユーザー・プロセスに対応付ける

  • インタラクションの概念的な順序を実装やデバイスから独立させる

  • 例外がユーザー・プロセスに悪影響を及ぼさないようにする

  • ユーザー・プロセスがどのように状態を変えていったのかを保持する

  • ユーザー・プロセスによって変更されたビジネス関連データを保持する

  • ユーザー・プロセスに中断と再開の機能を加える

  • ユーザー・プロセスが完了するときに、ビジネス・コンポーネントを呼び出す

 従って、ユーザー・プロセス・コンポーネントは以下のようなインターフェイスを公開することになる。

  • ユーザー・プロセスを動作させるメソッド

  • ビジネス関連データにアクセスするメソッド

  • 状態の変化で発生するイベント

  • 開始、終了、中断、再開、キャンセルのためのコントロール・メソッド

推奨

  • 設計時に、ユーザー・プロセスをコンポーネントとして分離すべきかどうかを検討する。ユーザー・プロセス・コンポーネントの設計は簡単な作業ではない

  • ユーザー・プロセス・コンポーネントはシリアライズ可能にして、ビジネス・プロセスとは別個に永続化できるようにする

  • ユーザー・プロセスをどこに保存するのかを検討する。クライアントがオフラインで動作するのか、障害が起きた場合にユーザー・プロセスを復元すべきなのか、別のコンピュータでプロセスを再開することがあるのか、などが判断基準となる

  • ユーザー・プロセス・コンポーネントで例外をとらえ、ユーザー・インターフェイスに渡す

 モバイル・デバイスなどで、クライアント・アプリケーションをオフラインで操作したい場合があるかもしれない。その際は、以下のような点に留意する。

  • ステータスバーやタイトルバーなどに、オンライン/オフラインの状態を表示する

  • ユーザー・インターフェイスは、オフラインでも最小の修正で再利用できるようにする。従って、サーバへのアクセスは非同期呼び出しが中心になる。同期呼び出ししか実装していない場合は、ローカルのストレージにアクセスするデータ・アクセス・ロジック・コンポーネントや、オフライン専用のビジネス・コンポーネントなどを用意する

  • アプリケーションのトランザクションが非同期呼び出しを受け付けるようにする

  • ユーザー・プロセスをローカルのディスクに保存できるようにする。

 次回はビジネス層に属する4つのコンポーネントと、データ層に属する2つのコンポーネントについて、その設計指針を引き続き解説していく。End of Article


 INDEX
  [連載] アプリケーション・アーキテクチャ設計入門
  第2回 論理アーキテクチャを構成するコンポーネントの設計(プレゼンテーション層編)
    1.ユーザー・インターフェイス・コンポーネントの設計
    2.4つのユーザー・インターフェイス・コンポーネント実装技術
  3.ユーザー・プロセス・コンポーネントの設計
 
インデックス・ページヘ  「アプリケーション・アーキテクチャ設計入門」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間