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

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

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

TERASOLUNA for .NETを活用したWindowsアプリケーション開発

 まずは、TERASOLUNA for .NETの機能を使わないで開発した場合について、プログラム・コードがどのようになるのかを見ていきます。その後、TERASOLUNA for .NETの機能を使って開発すると、どのようにプログラム・コードが変わるのかについて見ます。この比較によって、TERASOLUNA for .NETの狙わんとしているところを感じていただきたいと思います。

 ここで皆さんに特にお伝えしたいのは、「方法」ではなく「思想」です。TERASOLUNA for .NETの設計思想のポイントを解説しますので、ぜひ、皆さんの業務システム開発に活用してください。

スマート・クライアント・アプリケーションの仕様

 今回は説明用として、2つの整数の掛け算を行うスマート・クライアント・アプリケーションを作成します。掛け算自体の処理は非常に単純ですが、ここでは実際の業務システムらしく、テキストボックスに入力された値の検証や、通信エラー発生時の例外処理なども実装します。仕様をまとめると以下のようになります。

  • 掛け算アプリケーションの仕様
    1. クライアント側:テキストボックスに入力された2つの値が0以上200以下の整数であることを確認する。入力値が不正であれば、入力エラーを画面に表示して処理を終了する
    2. クライアント側:2つの整数をサーバに送信する。通信先サーバが見つからないなど、通信自体に失敗したら、通信エラーを画面に表示して処理を終了する
    3. サーバ側:サーバで掛け算を行い、クライアントへ結果を返却する
    4. クライアント側:掛け算結果を画面に表示する

 次の図はこの処理フローをまとめたものです。

図1 掛け算アプリケーションの処理フロー

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

 まずはTERASOLUNA for .NETの機能を使わない場合を見てみましょう。

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

 通常、.NET Frameworkを使ってスマート・クライアント・アプリケーションを開発する際は、Webサービスを利用します。Webサービスは.NET FrameworkやVisual Studioとの親和性が非常に高いため、通信処理を簡単に実装できます。ここではサーバ側で掛け算処理を行う、次のようなWebメソッドを公開します。

[WebMethod]
public int Calc(int x, int y)
{
  return x * y;
}
サーバ側:掛け算処理を行うWebメソッドの実装例(TERASOLUNAなし)

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

 続いて、クライアント側でこの掛け算Webメソッドを呼び出す処理を実装します。掛け算アプリケーションの仕様で示したように、入力値検証やエラー処理も実装します。

// TERASOLUNAなしの実装例
private void calcNoTerasolunaButton_Click(object sender, EventArgs e)
{
  // 初期化
  int numA = 0;
  int numB = 0;
  errorProvider.Clear();

  // 入力値検証
  bool isValid = true;
  // 数値Aの入力チェック
  if (string.IsNullOrEmpty(numberATextBox.Text))
  {
    isValid = false;
    errorProvider.SetError(numberATextBox,
      "数値Aは必須入力です。");
  }
  else
  {
    bool isParsed = int.TryParse(numberATextBox.Text, out numA);
    if (!isParsed || numA < 0 || 200 < numA)
    {
      isValid = false;
      errorProvider.SetError(numberATextBox,
        "数値Aは0以上200以下の数値を入力してください。");
    }
  }
  // 数値Bの入力チェック
  if (string.IsNullOrEmpty(numberBTextBox.Text))
  {
    isValid = false;
    errorProvider.SetError(numberBTextBox,
      "数値Bは必須入力です。");
  }
  else
  {
    bool isParsed = int.TryParse(numberBTextBox.Text, out numB);
    if (!isParsed || numB < 0 || 200 < numB)
    {
      isValid = false;
      errorProvider.SetError(numberBTextBox,
        "数値Bは0以上200以下の数値を入力してください。");
    }
  }
  // 入力エラーの場合
  if (!isValid)
  {
    return;
  }

  // サーバ処理の呼び出し
  WebService.Service service = new WebService.Service();
  int result = 0;
  try
  {
    result = service.Calc(numA, numB);
  }
  catch (WebException)
  {
    // 通信エラー発生時
    MessageBox.Show("通信でエラーが発生しました。");
    return;
  }

  // 通信正常終了
  answerLabel.Text = result.ToString();
}
クライアント側:掛け算Webメソッドを呼び出す処理の実装(TERASOLUNAなし)
入力値検証やエラー処理も実装する。

 さて、このクライアント側の実装について詳しく見てみましょう。仕様をすべて満たしていますし、Windowsアプリケーションとしても非常にオーソドックスな方法で実装したつもりです。ぱっと見た感じでは、特に違和感はないかと思います。

 しかし、この実装には非常に重大な問題があります。それは、1つのイベント・ハンドラの中に入力値検証処理、通信処理、画面への結果の反映処理、各種エラー処理のすべてが実装されているという点です。今回のサンプル・アプリケーションのようなシンプルな仕様でも、このような多くのプログラム・コードを実装しなければなりません。

 これが実際の業務システムのような複雑な仕様になったらどうでしょうか? 1つのイベント・ハンドラの中でもっと複雑なプログラム・コードの実装が必要となります。

 さらに1画面だけでなく、同じような処理を100画面で実装しなければならないとなったらどうでしょうか? プログラマーが1人ではなく、100人となったらどうでしょうか? 100人のプログラマーが100画面で、似ているけれども少しずつ違うプログラム・コードを実装します。保守性や品質の担保が難しいことがお分かりいただけると思います。

 それでは、続いてTERASOLUNA for .NETを使ったスマート・クライアント・アプリケーションの実装を見てみましょう。


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

本日 月間