こんにちは。近藤です。
前回の投稿ではASP.NET "Atlas" の概念について取り上げましたが、今回は、ASP.NET "Atlas" の論理アーキテクチャと物理構成について解説したいと思います。
以下の図はASP.NET "Atlas" の論理アーキテクチャ図です。
// クリックすると拡大したイメージが表示されます。
クライアント フレームワーク
○ ブラウザ互換層
ブラウザ互換層はその名の通りブラウザの違いを吸収します。これまでは、例えばActiveX コンポーネントが作成できるか判定するなどでブラウザを識別するという実装を開発者自ら行ってきましたが、このような処理が自動化され、ブラウザの違いを意識することなく統一的なプログラミングが可能となります。
○ スクリプト コア
スクリプト コアはJavaScript 向けの型システムを提供します。具体的には、クラス、継承、インタフェース、ネームスペースなどをスクリプトで実装可能となる仕組みが提供され、データやロジックをカプセル化することができます。(実際にはクロージャによる実装が行われているとイメージして下さい)
○ ベース クラス ライブラリ
ベース クラス ライブラリでは、例えばStringBuilder, Debug, Trace といった.NET Framework に似たようなクラス ライブラリとその機能が提供されます。
同様にXMLHTTP による非同期通信を抽象化するWebRequest / WebResponse (System.Net で提供されているクラスに相当するもの) が提供されます。
このように、スクリプト コアとこのベース クラス ライブラリの2 つの層によって、スクリプト ベースながらオブジェクト指向的なプログラミングを実現することができます。
また、ベース クラス ライブラリの重要な役割としてクライアント側のJSON シリアライズ/デシリアライズを行います。
JSON とはJavaScript Object Notation の略で、ECMA で規定されているデータ交換のフォーマットです。
詳しくは以下のサイトをご覧下さい。
http://json.org/
このJSON は
・サーバーとの通信を純粋なXML で交換するよりもデータ量を抑えることが期待できる
・DOM をはさまず、Eval 関数で直接オブジェクトへ変換できることからJavaScrpt との愛称が良い
といった理由から、多くのAjax Web アプリケーションで活用されています。Atlas もデータ交換形式としてJSON を利用しています。
○ コンポーネントモデル/UI フレームワーク
コンポーネントモデル/UI フレームワークでは、スクリプトベースのコードをコンポーネントとして扱うための機能が提供されます。
例えばリソース解放のメカニズムなどが実現され、コントロール間の連携や検証を行うといった基本機能が提供されます。
また、Atlas で導入される独自のXML 言語のXML-Script を解釈するのもこの層になります。XML-Script については、後日解説します。
○ コントロール
コンポーネントモデル/UI フレームワークをベースにAtlas 独自に機能拡張されたLabel, TextBox, ListView, DataSource コントロールなどのビルトインのクライアントサイド コントロールが提供されます。
サーバー フレームワーク
ASP.NET "Atlas" のサーバー側フレームワークはASP.NET 2.0 をベースとしています。
○ Atlas Web サーバー コントロール
ASP.NET "Atlas" で拡張されたWeb サーバーコントロールが提供されます。このWeb サーバーコントロールによって、実際にはクライアント サイドで動作するインタラクティブな操作をサーバーサイドの定義で実装することができます。
○ Web サービス ブリッジ
Web サービス ブリッジは、クライアント・サーバー間でWeb サービスのやり取りを行うため機能 (プロキシの生成など) を提供します。特にこのWeb サービス ブリッジはサーバー側のJSON シリアライズ/デシリアライズを実現するため重要です。なお連携可能なサービスの種類として、ASP.NET 2.0 のWeb サービス以外にも、将来的にはWCF (Windows Communication Foundation) ベースのサービスとも連携が可能となります。
○ アプリケーション サービス ブリッジ
アプリケーション サービス ブリッジでは、ASP.NET 2.0 で提供されているアプリケーション サービス、例えばプロファイリングや認証などをクライアント側とシームレスに連携するための機能を提供します。
クライアント アプリケーション サービス
クライアント側には、さらにクライアント アプリケーション サービスというものが提供される予定です。現在開発中で、物自体まだ存在していないのですが、将来的にはデスクトップの機能、例えば、ローカルへのデータストアやマイドキュメントへのアクセスなどに安全にアクセスできる機能が提供される予定です。
論理的なアーキテクチャは以上です。
一方、具体的な物理構成がどのようになっているか解説します。
こちらは実際にASP.NET "Atlas" January 2006 版によるWeb アプリケーションのプロジェクト構造です。
// クリックすると拡大したイメージが表示されます。
クライアント フレームワークは実際にはJavaScript から構成されています。(ScriptLibrary - Atlas - Debug/Release フォルダ)
- Atlas.js
クライアントサイド コンポーネント/コントロールなどのクライアント フレームワークのほぼすべての機能が提供されます。
- AtlasComat.js / AtlasCompat2.js
ブラウザ互換機能が提供されます。
- AtlasRumtime.js
コンポーネントやコントロールを持たず、コア機能のみ提供されます。ScriptManager コントロールのEnableScriptComponents プロパティをfalse にすることで、AtlasRuntime.js を利用することができます。
- AtlasUIDragDrop.js
ドラッグ アンド ドロップ操作を制御するための機能が提供されます。
- AtlasUIGlitz.js
エフェクト(透明化など) やアニメーションを付加するための機能が提供されます。
- AtlasUIMap.js
MSN Virtual Earth のサービスを利用するための機能が提供されます。
一方、サーバー フレームワークの実態は、Microsoft.Web.Atlas.dll で提供されています。(Bin フォルダ)
さらにWeb.config に様々な定義が行われて、処理をサーバーフレームワークを経由するように設定されています。例えばatlas タグの定義や、HttpHandler/HttpModule によるWeb サービスのハンドリングの定義が行われています。
このように、ASP.NET "Atlas" ではクライアント フレームワークとサーバー フレームワークの2つのフレームワークが提供されています。これはASP.NET "Atlas" が多様な開発者をサポートすることを目的としているからです。
この2つのフレームワークをいかに使い分けるかについては次回の投稿にしたいと思います。
それでは。
新しいASP.NET の世界をお楽しみください。
Kazuhiko Kondo (kkondo)