|
.NETエンタープライズWebアプリケーション 開発技術大全 ― エンタープライズWebアプリ開発に必要な知識と設計セオリー ― |
マイクロソフト コンサルティング本部 赤間 信幸 |
|
.NETエンタープライズWebアプリケーション
開発技術大全 同書はマイクロソフトのコンサルタントが執筆した.NETシステム設計/構築のための技術解説書で、全5巻で構成されています。 このうち、第1巻から第3巻までがすでに発売されています(第4巻と第5巻は、2004年秋以降の発行が予定されています)。 Insider.NETでは、全6回に渡り、.NET開発者にとって特に重要だと思われる個所をこの3巻より抜粋して掲載していく予定です。なお、書籍の詳細については本記事の最後に表記しています。 |
ご注意:本記事は、前挙の書籍の内容を改訂することなく、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。 |
C/S型システムとWeb型システムには、(原理的な問題として)クライアントのUI操作性とシステム全体のスケーラビリティに関して互いにトレードオフの関係がある。すなわち、高いUI操作性を求めたければWindowsベースのGUIアプリケーションにせざるを得ず、逆に高いスケーラビリティを求めたければコネクションプーリングが利用できるようにデータベース処理をサーバ側で束ねる必要がある、ということになる。これらのトレードオフ要因の「良いとこ取り」をしようとするシステム形態がここで述べるスマートクライアント型システムである。
1 本システム形態の特徴
スマートクライアント型システムとは、ビジネスロジック処理やデータベースアクセス処理を行うためのXML Webサービスと、それを呼び出すGUIクライアントアプリケーションの組み合わせにより構成されるシステム形態である(図1)※1。このシステム形態では、データベースアクセスがサーバ側で集約されるためコネクションプーリングを利用することができ、大規模クライアントをサポートすることが可能になる。またクライアントにはGUIアプリケーションが利用されるため、高度なUIを実現することが可能である。
※1 これは最も一般的な形態であるが、クライアントにスマートデバイスを利用したり、サーバに各種サーバ製品を活用したりと様々なバリエーションが可能である。またXML Webサービスは、後述する疎結合システムのみに利用されるものだと誤解している人もいるが、ここで解説するスマートクライアント型システムのように、密結合システムにおける通信技術としても非常に有用性の高いものである。 |
図1 スマートクライアント型システムの構成 |
このシステム形態でも、やはりC/S型システムと同様にクライアントの総所有コスト(TCO)が問題になることが多い。しかしこの点に関しては、CLR(共通言語ランタイム)の機能を利用することにより問題を解決または緩和することが可能である※2。このため、従来TCOを理由としてC/S型システム形態を敬遠し、UI操作性を犠牲にしてWeb型システムを選択してきた企業にとっては、1つのブレイクスルーとなり得るシステム形態であると言える。
※2 理由はC/S型と同じ内容となるのでここでは解説を割愛する。詳細はC/S型システムの解説の項を参照して頂きたい。 |
2 本システム形態の構成例
イントラネットシステムにおけるスマートクライアント型システムの典型的な構成例を図2に示す。
図2 イントラネットシステムにおけるスマートクライアント型システムの典型的な構成例 |
このシステム形態では、まず、ビジネスロジックやデータベースアクセスなどのトランザクション処理を、Webサーバ上にXML Webサービスとして構築する。これによりコネクションプールが利用可能となり、クライアント数に比べて圧倒的に少ないコネクション数で済ませることができる。このため、システム全体のスケーラビリティが向上する。
クライアントアプリケーションに関しては、Windowsフォームベースのアプリケーションとして開発し、Webサーバ上の公開ディレクトリに配置する(図3)。各クライアントには事前に.NET Frameworkのランタイムをインストールしておく。エンドユーザがアプリケーションを利用する際に、Webブラウザからこのexeプログラムを起動すれば、常に最新版を利用することができる(ノータッチデプロイメント)。
ダウンロードされたexeプログラムにはCAS(Code Access Security)によるセキュリティ制限がかかるため、当該PC内で不正動作を行うことはできないが、ダウンロード元となったWebサーバとであればHTTP通信が可能である。このため、このexeプログラムはXML Webサービスを呼び出してビジネス処理を進めていくことができる。
図3 Webサーバからのスマートクライアントの配布 |
このようなシステム形態を利用すれば、C/S型やWeb型のシステム形態が持つトレードオフ要因の「良いとこ取り」が可能になる、というわけである。
3 本システム形態の問題点
このシステム形態は、クライアントへのアプリケーション配布問題さえクリアできれば一見万能に見える。しかし、実際には他に2つの問題点がある。
A. アプリケーション設計の難易度の高さ
C/S型、Web型、スマートクライアント型の3パターンにおいて、ユーザインタフェース処理(UI)、ビジネスロジック処理(BC)、データアクセス処理(DAC)の各機能がどのマシン上で実行されるのかを図4に示した。スマートクライアント型システム形態では処理ロジックがクライアントサイドとサーバサイドに分離される。このため、アプリケーション設計の難易度は大幅に向上し、開発工数やテスト工数もC/S型やWeb型に比べると膨らむことになる。
スマートクライアント型システム形態は、設計・開発の難易度を差し置いても、高度なUI操作性と大規模クライアント対応とを両立させる必要がある場合に利用される。
図4 C/S型、Web型、スマートクライアント型の実行方式の違い |
B. XML Webサービスに対応させるための開発作業コストがかさみやすい
残念ながら現時点においては、効率よくXML Webサービスを開発できる開発ツールがまだ少ない。例えばXML Webサービスのコンパイル、配置、実行、デバッグ、テストといった一連の作業に要する時間を比較すると、製品によって大きな開きがある(後述するようにVisual Studio .NETを利用する場合は非常に高速であるが、このような開発ツールは現時点ではまだ少ない)。このため、利用するツールによってはXML Webサービス開発に要する時間・コストがどうしてもかさんでしまう。
C. XML Webサービスに対するアーキテクチャ的な見方が開発手法などによって異なる
また、ベンダや開発技術によってXML Webサービスへの対応方法が異なることも正しく理解しておく必要がある(これはどの開発手法を利用しても設計の工夫により回避できる問題ではあるが、アプリケーション設計上特に注意しておくべきポイントであるため解説を加えておく)。
従来から存在する開発技術、例えばWindows DNAやJ2EEでは、XML Webサービスをコンポーネントの拡張機能として実装しているケースが多い。Windows DNAでは(主にビジネスロジックなどを記述することになる)COMコンポーネントを直接XML Webサービスから呼び出せるようにしている。またJ2EEベンダも、EJB(Enterprise Java Beans)をXML Webサービス経由で直接呼び出せるようにしているケースが多い。
しかし本来あるべき姿から考えてみると、XML Webサービスという「通信インタフェースとしての機能」と、自動トランザクション制御といった「ビジネスロジックコンポーネントとしての機能」とは本質的に別物である。このため、通信機能とビジネスロジックとは別コンポーネントに分離するような設計・実装が望ましい。
このことは認証方式や通信プロトコルの異なる複数のクライアントから通信を受け付ける場合を想定してみれば分かりやすい。このようなケースでは、図5のように複数の通信インタフェースで1つのビジネスロジックを共用すべきである。
図5 複数の通信インタフェースで1つのビジネスロジックを共用する |
つまり仮にCOMコンポーネントやEJBコンポーネントが直接XML Webサービスの要求を受けられるようになっていたとしても、アーキテクチャ的には「ビジネスロジックを持ったコンポーネントを、通信機能を持たせたコンポーネントでラッピングするように分けて設計する」ことが望ましい、ということになる。
このような設計上の留意点が発生するのは「XML Webサービスにネイティブ対応した専用の開発手法を持たないから」だとも考えられる。しかしいずれにせよ、XML Webサービスに関しては現在まだその対応方法や考え方にバラつきがあるということである。
A.のアプリケーション設計の難易度の高さは本質的な問題ではあるが、B.とC.の2つの問題は、純粋に開発技術のXML Webサービスへの対応が不完全であるという理由によるところが大きい。これらの問題はVisual Studio .NETを利用すれば解決を図ることが可能である。
INDEX | ||
.NETエンタープライズWebアプリケーション開発技術大全 | ||
スマートクライアント型システムにおけるVisual Studio .NETのメリット | ||
1.本システム形態の特徴/構成例/問題点 | ||
2.Visual Studio .NETによる簡単なXML Webサービス開発 | ||
3.サーバ/クライアントへのパッケージ製品の応用 | ||
4.InfoPathを活用したスマートクライアント型システム | ||
「.NETエンタープライズWebアプリケーション開発技術大全」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|