連載

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

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

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

Page1 Page2 Page3

 AAfNでは、ユーザー・インターフェイス・コンポーネントの実装技術として、Windowsアプリケーション、インターネット・ブラウザ、モバイル・デバイス、ドキュメントの4つを提案している。

ユーザー・インターフェイス・コンポーネントの実装技術
AAfNではユーザー・インターフェイス・コンポーネントの実装技術として4つの形態を提案している。

Windowsアプリケーション

 Windowsアプリケーションとしてユーザー・インターフェイス・コンポーネントを実装することのメリットとしては、オフラインでも利用できること、操作性を高められること、ほかのアプリケーションのユーザー・インターフェイスを統合できること、が挙げられる。

 AAfNでは、Windowsデスクトップ・アプリケーションによるユーザー・インターフェイスを3つに分類している。

1. Windowsフォームで作られた、本格的なWindowsアプリケーション

 このメリットは、豊富な機能により快適な操作性をユーザーに提供できることと、アプリケーションの外観を自由にできることである。デメリットは、クライアントの環境に依存してしまうことと、アプリケーションを(Webからダウンロードするのであっても)インストールしなければならないことである。

2. HTMLを埋め込んだWindowsアプリケーション

 ユーザー・インターフェイスの一部をHTMLで表現したWindowsアプリケーションである。メリットは、外観を動的に変更できること、ユーザーによるカスタマイズが容易になることである。デメリットは、セキュリティ・ホールを埋め込まないためにデータのサニタイジング(特殊文字などの無効化)が必要となることと、HTMLやイベントの処理のために特別なコードが必要となることである。

3. ほかのアプリケーションのプラグイン

 プラグインの形で特定のアプリケーションを拡張する手法である。メリットは、ユーザー・インターフェイスのほとんどをほかのアプリケーションに任せるため、開発者はビジネス・ロジックに専念できることである。デメリットは、プラグインをホストするアプリケーションに強く依存してしまうことである。

推奨

  • 同時に開かれるフォーム間でデータを同期するためには、データ連結を使う

  • 画面遷移はコードに直接記述せずに、ユーザー・プロセス・コンポーネントを利用する

  • フォームでも例外をキャッチする

  • サーバのコンポーネントを呼び出す前に、ユーザーの入力を検証して結果をユーザーに見せる

  • カスタム・ユーザー・コントロールのインターフェイス(プロパティやメソッド)は必要最小限だけを公開する

  • イベント・ハンドラに直接Controller機能を実装しないで、最低限メソッドを別にする

インターネット・ブラウザ

 インターネット・ブラウザによるユーザー・インターフェイスは、多くのデバイスとプラットフォームから利用できる標準規格に基づくユーザー・インターフェイスである。.NET Framework上で開発する場合は、ASP.NETがさまざまな機能を提供してくれる。

推奨

  • カスタムエラー・ページを用意し、global.asaxでアプリケーションのエラーを処理する

  • データの検証はクライアント側だけではなく、ほかのページに遷移する前にサーバ側でも行う

  • カスタム・ユーザー・コントロールのインターフェイス(プロパティやメソッド)は必要最小限だけを公開する

  • ページ固有の状態を保持するためにはビューステート(ページのViewStateプロパティ)を使う

  • ページのリダイレクトはController機能が直接するのでなく、必ずユーザー・プロセス・コンポーネントで行う

  • イベント・ハンドラに直接Controller機能を実装しないで、最低限メソッドを別にする

モバイル・デバイス

 ここでは、ハンドヘルドPC、WAP電話、iモード端末などを総称してモバイル・デバイスと呼んでいる。これらのデバイスをユーザー・インターフェイスとして利用する場合、前に挙げたようなデスクトップPC向けのユーザー・インターフェイスとは異なる考慮が必要になる。特に重要なのは、画面の広さである。モバイル・デバイスは画面がずっと狭いので、デスクトップPCとは違った操作性を提供しなければならない。例えば、クレジット・カードの番号を登録するのにはデスクトップ・クライアントを使い、モバイル・クライアントでは登録されたカード情報の選択のみを行うといったように、モバイル・デバイスとデスクトップPCとを協調させることが考えられるだろう。

1. Web

 さまざまなモバイル・デバイスがWeb閲覧をサポートしているが、ブラウザによって対応しているマークアップ言語に差がある。マイクロソフトが提供しているASP.NETモバイル・コントロール(以前はMobile Internet Toolkitと呼ばれていた)を使えば、HTML 3.2、WML、cHTMLなど、ブラウザの種類に応じて自動的に出力する形式を変更してくれる。

2. スマート・デバイス

 モバイル・デバイスのOSがPocket PCやWindows CE .NETであれば、.NET Compact Frameworkが動作する。つまり、モバイル・デバイスに.NET Compact Frameworkがインストールしてあるのなら、モバイル・デバイス向けのリッチ・クライアントを.NETベースで開発できるということである。

推奨

 どちらの場合も基本的にデスクトップPC向けと同じだが、モバイル・デバイスの場合は特に入力データの検証に注意を要する。Webであれば、クライアント側での検証には多くを期待できないし、スマート・デバイスであれば、Visual Studio .NETの「スマート・デバイス拡張」には、検証コントロールが含まれていないためである。

ドキュメント

 これは、WordやExcelといったOfficeスイート製品のドキュメントをユーザー・インターフェイスにすることを指している。この方式は、ユーザーが普段使っている道具を使ってデータを入力したり閲覧したりすることができる点にメリットがある。

 利用目的は2つに大きく分けられる。

  • データの閲覧。適切な形式のドキュメントとしてデータを閲覧できる

  • データの収集。電話で注文を受けた営業担当者がExcelのシートに注文情報を書いて、ドキュメントをビジネス・プロセスに渡すなど

 また、ドキュメント・ベースのユーザー・インターフェイスの利用シナリオとして、「システム外部での作業」と「システム内部での作業」が考えられる。

 「システム外部での作業」は、ドキュメントにロジックが含まれない場合である。データの収集では、ユーザーは好きなようにドキュメントを作成した後、Windowsアプリケーションでドキュメントを取り込むか、Webアプリケーションでドキュメントをアップロードする。データの閲覧では、WindowsまたはWebアプリケーションがドキュメントを作成する。作成されたドキュメントは、ユーザーがディスクに保存したり、ハイパーリンクとして提示されたり、結果画面に埋め込まれたりする。

 「システム内部での作業」は、ドキュメントがロジックを含む場合である。データの収集では、事前に定義されたフォームを用いる。カスタム・ボタンやメニュー・オプションに対応してスクリプトが実行され、ビジネス・コンポーネントやユーザー・プロセス・コンポーネントが呼び出される。データの閲覧では、サーバからデータを受け取るためのカスタム・ボタンやメニュー・オプションを実装する。例えば、営業がフォームに顧客名を記入したときに、CRMデータベースから取得した全契約情報を表示する、といった感じである。

推奨

 ドキュメント・ベースのユーザー・インターフェイスにおいても、入力データの検証には注意が必要である。データ型を限定するだけでなく、データをチェックしてエラーを表示する機能を実装する場合も多いだろう。

 AAfNは、ユーザー・インターフェイス・コンポーネントが、ビジネス層を通さずに直接データ・アクセス・ロジック・コンポーネントにアクセスすることを認めている。これは論理階層(レイヤ)の概念を壊すように思えるが、便利な場合も多いため、以下の条件を満たすのであれば、そのような設計を検討してもよい。

  • ユーザー・インターフェイスとデータアクセス・ロジックを密に結合させたい場合は、直接データ・アクセス・ロジック・コンポーネントにアクセスしてもよい。ただし、一方の変更が他方に影響を及ぼすことに注意する

  • ユーザー・インターフェイス・コンポーネントとデータアクセス・ロジック・コンポーネントが同一のサーバに置かれていて、かつ、DataReaderクラスを使用した場合のようにデータ・ストリームを直接ユーザー・インターフェイスに表示することでパフォーマンスを改善できる場合は、直接データ・アクセス・ロジック・コンポーネントにアクセスしてもよい。ただし、それらのコンポーネントが別のサーバに置かれている場合は、性能の向上は期待できない

 ただし、いずれにせよデータ・アクセスのロジックとビジネス・プロセスのロジックを混在させてはいけない。


 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 記事ランキング

本日 月間