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

.NET開発でもオープンソース・フレームワークを使おう

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

【本稿の読者ターゲット】
・.NETを使った業務システムの開発者
・その開発者の中で特に、どのようなフレームワークを構築すればよいのかを検討する方

.NETでの業務システム開発でオープンソース・フレームワークって必要?

 近年、大規模業務システム開発では、オープンソースのアプリケーション・フレームワーク(以下、単に「フレームワーク」と略記)を導入することが一般的になってきています。

 しかし、.NET開発者の皆さんはフレームワークを使った業務システム開発と聞くと、Javaの話と考えることが多いのではないでしょうか? Javaによる業務システム開発では、StrutsやSpringというほぼ業界スタンダードといってもよいWebアプリケーション向けのフレームワークを使って開発を進めることが多くあります。さらに開発プロジェクトによっては、これらのフレームワークを拡張したり機能追加したりして、その業務システム向けに特化したフレームワークを整備してから開発を進めることもあります。

 それでは、.NETの世界には業界スタンダードといえるフレームワークは存在しているのでしょうか?

 なるほど、.NET Frameworkには「Framework」という名前が付いています。ですが、これはどちらかというと巨大なクラス・ライブラリのようなイメージです。あえてフレームワークと表現するならば、.NET Frameworkに含まれる「Windowsフォーム」や「ASP.NET」はフレームワークといえるでしょう。これらによって、デスクトップ・アプリケーション開発やWebアプリケーション開発に必要となる基本的なアーキテクチャと機能が用意されているからです。

 Visual Studioは、これらのフレームワークを最大限に生かせる開発環境になっています。Visual Studioを使った開発では、基本的には画面を作成してイベント・ハンドラに処理を実装するだけです。また、業務システムでよく行うデータ・アクセス処理の実装も、Visual Studio上からウィザード形式で開発することができます。データ・アクセスなどの比較的複雑な処理も、Visual Studioがその複雑な処理を隠ぺいしてコードを自動生成してくれるため、非常に高い生産性を発揮できます。

 このように.NETの世界では、.NET Frameworkの持つフレームワーク的な要素と、それを効率的に活用するためのVisual Studioという開発環境が提供されているので、業務システム開発を誰でも簡単に、高い生産性で進めることができるという特徴があります。

 ここまで聞くと、.NETの世界ではWindowsフォームやASP.NETというフレームワークだけで十分であり、それ以上の業務システム向けフレームワークなんて必要ないと思われるかもしれません。しかし、「誰でも簡単に」開発できてしまうがゆえに、WindowsフォームやASP.NET以上の業務システム向けフレームワークが必要なのです。

.NET Frameworkだけの業務システム開発で起こり得る問題

 では、純粋にWindowsフォームやASP.NETをそのまま使って開発を進めることで、どのような問題が起こるのでしょうか?

 1つ目の問題として、各開発者によって実装方法がバラバラになってしまい、システム全体の保守性が下がることが考えられます。2つ目の問題として、複雑な処理の作り込みが多く発生し、必然的にバグが多くなることが考えられます。これら2つの問題点について、詳しく説明しましょう。

問題点[1]:各開発者によって実装方法がバラバラになってしまい、システム全体の保守性が下がる

 まず、システム全体の保守性が下がるという問題について考えてみましょう。WindowsフォームやASP.NETでは、大まかなアーキテクチャは決まっていますが、イベント・ハンドラなどの実装方針は決まっていません。WindowsフォームやASP.NETは、マイクロソフトが全世界向けに提供している汎用フレームワークですから、これは当然のことです。

 実はここに落とし穴があって、大まかなアーキテクチャは決まっているため、それ以上のことをあまり考えなくてもそれなりに開発できてしまうのですが、それゆえに、実装方法が開発者によってバラバラになってしまうことがよくあります。それが業務システム開発においては大きな問題となります。

 実装方法がバラバラになると何が悪いのでしょうか? システム全体で実装方法の一貫性がなくなると、後からシステムの一部を修正したい場合でも、関連するすべてのプログラムを読み直さないと構造が理解できなくなってしまいます。こうなってしまうと、まずバグの原因を見つけること自体が困難になります。さらに、システムの一部を変更したいときにも、影響範囲がどこまで及ぶのかも分かりにくいため、バグの改修自体に余計な時間がかかってしまいます。

 このように、システム全体での一貫性を意識しないで業務システムを開発していくことは、システム全体の保守性を低下させるリスクとなってしまいます。

問題点[2]:複雑な処理の作り込みが多く発生し、必然的にバグが多くなる

 次に、複雑な処理の作り込みが多く発生し、必然的にバグが多くなるという問題について考えてみましょう。.NETでは多くの便利な機能が最初から用意されているため、比較的簡単に開発を進められます。しかし、すべての処理を簡単に実装できるわけではないことに注意しなければなりません。少し複雑な処理を作り込もうとすると、途端に考慮しなければならないことが増えてきます。

 では、どのようなことを考慮して複雑な処理を実装しなければならないのでしょうか? 例としてデータ・アクセス処理、通信処理、非同期処理について考えてみましょう。

 まずデータ・アクセス処理です。データ・アクセスでは、よくテーブルアダプタ(TableAdapter)を使います。単一のテーブルアダプタのみを使う場合は、トランザクション管理やコネクション管理を隠ぺいしてくれているので、データ・アクセスの複雑さをほとんど意識することはありません。

 しかし、複数のテーブルアダプタを単一のトランザクションに束ねる必要がある場合などは、自分でトランザクション管理やコネクション管理を実装しなければなりません。このような場合には、「どんなときにトランザクションをコミットして、どんなときにロールバックするのか?」「コネクションはどのクラスで管理し、実際にデータ・アクセスを行うテーブルアダプタなどのクラスには、どのように渡すのか?」「データ・アクセス中に例外が発生した場合はどう処理するのか?」などなど、非常に多くのことを考えないといけません。単一のテーブルアダプタを使う場合と比べると、途端に実装の難易度が上がります。

 次に通信処理ですが、正常に通信が完了する場合はそれほど問題ありません。しかし、通信中にエラーが発生した場合の処理では、非常に多くのことを考慮しなければなりません。例えば、「通信先に接続できない場合はどうするのか?」「通信先に接続はできたが、タイムアウトが発生した場合はどうするのか?」「通信自体は成功したが、通信先から業務エラーが返ってきたらどうするのか?」など、簡単に思い付くだけでもいくつか出てきます。ここでは一部の例を挙げていますが、異常系の処理でまだまだたくさん考えることがありそうです。

 最後に非同期処理ですが、こちらも非常に複雑な処理を考えなければなりません。例えば、「非同期で実行する処理はスレッドセーフになっているか?」「非同期実行中のワーカースレッドで発生した例外を、どのようにUIスレッドに通知するか?」「非同期処理のキャンセル処理はサポートするのか?」など、マルチスレッド絡みの複雑な課題を1つ1つ解決しなければなりません。

 このように、少し複雑な処理を作り込もうとすると、かなり多くのことに気を付けないといけません。しかも気を付けなければならない点は、例外処理などの特殊な異常系の処理であることが多くあります。このような複雑な処理を各開発者がそれぞれ考えて実装していたのでは、当然、バグも多くなってしまうことでしょう。これはシステム全体の品質にかかわる大きな問題です。

 以上、純粋にWindowsフォームやASP.NETをそのまま使って業務システム開発を進めていくことの問題点を見てきましたが、あいまいなアーキテクチャで各開発者が複雑な処理を実装していくことは、業務システム開発において大きなリスクとなり得ます。このリスクを少しでも小さくするためにはどうしたらよいでしょうか? そのための1つの手段が、業務システム向けフレームワークを利用することなのです。

 では、.NETでの開発において業務システム向けフレームワークに求められる条件とは、どのようなものなのでしょうか?


 INDEX
  [TERASOLUNA for .NETフレームワーク概説]
  .NET開発でもオープンソース・フレームワークを使おう
  1..NET Frameworkだけの業務システム開発で起こり得る問題
    2..NETでの業務システム向けフレームワークに必要な“3+1”の条件
    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 記事ランキング

本日 月間