TERASOLUNA for .NETフレームワーク概説

高品質なWindowsアプリケーション構築ポイント

株式会社NTTデータ
技術開発本部 ソフトウェア工学推進センタ 
立見 博史
2009/01/06
Page1 Page2 Page3 Page4

TERASOLUNA for .NETの機能を使って開発したスマート・クライアント・アプリケーション

 なお、ここではTERASOLUNA for .NETを使った実装手順や機能の詳細については触れません。手順や機能詳細については、SourceForge.jpのTERASOLUNAプロジェクトで公開しているチュートリアルや各種説明書を参照してください。

(1)サーバ側処理の実装

 それでは、さっそくTERASOLUNA for .NETを使った実装を見てみましょう。サーバ側の実装は以下のリストのようになります。ビジネス・ロジックの入出力にデータセット(CalcFormDsクラス)を利用していますが、先ほどのWebサービスと比べてそれほど大きな違いはないと思います。詳細はTERASOLUNA Server/Client Framework for .NETの「機能説明書」の「リクエストコントローラ機能」を参照してください。なお、サーバ側ビジネス・ロジックで例外が発生した場合は、フレームワークがエラー・ハンドリング処理を行って、クライアントに通知します。

public BLogicResult Execute(BLogicParam param)
{
  // 掛け算を行うための値の取得
  CalcFormDs inputDs = param.ParamData as CalcFormDs;
  int numberA = Int32.Parse(inputDs.CalcTable[0].NumberA);
  int numberB = Int32.Parse(inputDs.CalcTable[0].NumberB);

  // 掛け算の実行
  int answer = numberA * numberB;

  // 掛け算ビジネス・ロジック結果クラスに格納するデータセットの作成
  CalcFormDs outputDs = new CalcFormDs();
  outputDs.CalcTable.AddCalcTableRow(null, null, answer);

  // 掛け算ビジネス・ロジックの結果クラスの作成
  return new BLogicResult(BLogicResult.SUCCESS, outputDs);
}
サーバ側:掛け算処理を行うビジネス・ロジックの実装例(TERASOLUNAあり)

(2)クライアント側処理の実装

 続いて、クライアント側の実装を見てみましょう。

// TERASOLUNAありの実装例
private void calcTerasolunaButton_Click(object sender, EventArgs e)
{
  ExecutionResult result = calcEvent.Execute();
}

public override void HandleError(string resultString, IList<MessageInfo> messages, object view)
{
  base.HandleError(resultString, messages, view);

  if ("communicationException".Equals(resultString) )
  {
    MessageBox.Show(messages[0].Message);
  }
}
クライアント側:掛け算ビジネス・ロジックを呼び出す処理の実装(TERASOLUNAあり)

 どうでしょうか? プログラム・コードはたったのこれだけです。かなり整理されていることが分かると思います。ここでのポイントは、EventControllerコンポーネント(calcEventオブジェクト)と、共通的なエラー・ハンドリング処理を行っているHandleErrorメソッドの2点です。

 1点目のEventController(以下、「コンポーネント」という表記は省略)ですが、Visual Studioのプロパティ・ウィンドウから設定を行うだけで、入力値検証からサーバの通信、その間で発生するエラーのハンドリング処理を実装できます。設定と動作の関連を以下の画面と表に示します。

図2 EventControllerの設定例
主要なプロパティ項目については以下のとおり。
プロパティ名 説明
BLogicName ビジネス・ロジック設定ファイルに定義したXML通信を行うビジネス・ロジックの名前
ConvertId データセット変換設定ファイルに定義したコンバートID
ErrorHandler 共通エラー処理(HandleErrorメソッド)を実装したクラスのインスタンス
RequestName サーバで動作する処理を特定するための識別子
ValidationFileParh 入力値検証設定ファイルのパス
ViewData 画面データセットのインスタンス

 次の図はクライアント側のメソッドが掛け算ビジネス・ロジックを呼び出す際の流れ(EventControllerの動作)をまとめたものです。

図3 EventControllerの動作概要

 クライアント側で実行する典型的な処理を定型化するEventControllerを、各画面が必ず実行(Execute)するようにします。このようにすることで、開発する画面が増えたりプログラマーが増えたりした場合でも、入力値検証を行ってサーバと通信するという典型的な処理においては、実装方法がぶれることは一切なくなります。

 画面のイベント・ハンドラで実装することは、EventControllerの呼び出しと、画面個別の処理のみです。すべての画面が一貫性を持って実装されるため、保守性が飛躍的に向上します。

 TERASOLUNA for .NETではEventControllerを提供していますが、皆さんのプロジェクトでも似たような共通クラスを整備することで対応できると思います。そのときのポイントは、「典型的な一連の処理」を共通クラスとして提供することです。

 入力値検証だけ、ビジネス・ロジックの実行だけ、通信処理だけというような、あるまとまった個別の機能を共通クラス化するだけにとどまらないでください。そこからさらに一歩進んで、それらの機能をまとめるような共通クラスを整備してください。そうすることで、典型的な処理を定型化することができます。

 2点目のHandleErrorメソッドですが、このメソッドは各画面で共通的なエラー・ハンドリング処理を実現します。EventControllerの実行中に発生した業務エラーは、すべてこのHandleErrorメソッドに通知されます。その流れを示したのが次の図です。

図4 共通エラー・ハンドリング処理の概要

 HandleErrorメソッドの引数に処理結果を示す結果文字列(resultString)が渡ってきますが、この結果文字列がエラー種別を表しています。エラー種別として「validationFailed」が通知された場合は、標準で入力値検証エラーをデータセットに設定する処理が行われます。

 ここではさらに、結果文字列が「communicationException」の場合に、通信エラーをメッセージ・ボックスに表示するような拡張を行っています。このようにエラーが通知されるのは、TERASOLUNA for .NETが提供しているXML通信用ビジネス・ロジック内で通信エラー時に発生するWebException例外がキャッチされ、エラー種別「communicationException」として処理しているためです。

 TERASOLUNA for .NET上でビジネス・ロジックを実装する場合、ビジネス・ロジック内では業務エラーとして処理すべき例外のみをキャッチし、そのエラー種別を結果文字列として通知するようにします。TERASOLUNA for .NETが標準で提供しているビジネス・ロジックではWebException例外のみを業務エラーとして処理するように実装していますが、例外の対処方法はシステムごとに異なると思いますので、この部分は必要に応じて拡張してください。

 ここでのポイントは、EventControllerの実行中に発生した業務エラーすべてをHandleErrorメソッドで処理していることです。実装例を見ていただければ分かると思いますが、入力値検証エラーの表示処理をイベント・ハンドラ内で実装していません(もちろん、イベント・ハンドラ内で業務エラー処理を実装することもできます)。

 通常、業務エラーや例外の対処方法はシステム全体で統一して設計します。TERASOLUNA for .NETでは、共通的なエラー処理をHandleErrorメソッドに委ねます。従って、HandleErrorメソッドをあらかじめシステム共通的に整備しておくことで、システム全体で統一したエラー処理が実現できるのです。このようにエラー処理を統一化しておくことで、プログラマーは例外処理や業務エラーの処理に頭を悩ませることはなく、正常系の処理の実装に注力できるようになるのです。

 以上のように、TERASOLUNA for .NETでは典型的な処理を定型化したり、エラー処理を共通化したりすることによって、高品質で保守性の高いWindowsアプリケーションの開発をサポートしています。


 INDEX
  [TERASOLUNA for .NETフレームワーク概説]
  高品質なWindowsアプリケーション構築ポイント
    1.保守性が高く、高品質なWindowsアプリケーションの開発
    2.TERASOLUNA for .NETを活用<しない>スマート・クライアントの開発
  3.TERASOLUNA for .NETを活用したスマート・クライアントの開発
    4.TERASOLUNA for .NETの応用例

インデックス・ページヘ  「TERASOLUNA for .NETフレームワーク概説」


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

本日 月間