SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Visual WebGUIによるAJAX対応CMS(コンテンツ管理システム)の構築
フレームワークの作成

柔軟なソフトウェアシステムの開発には、強固なフレームワークが不可欠

  • X ポスト
  • このエントリーをはてなブックマークに追加

スタートアップフォームの登録と設定

 WTWorkplaceControllerは、呼び出す側と呼び出される側の両モジュールの橋渡しとなります。サンプルのForm1ファイルは、ワークプレースとモジュールを使った例です。Form1には、IWTWorkplaceのワークプレースが2つあります。そのうちの1つ目に、メニューの役割を果たすIWTModule(Dashboard)をロードします。メニュー項目からは、同じワークプレースまたは右側のワークプレースに対し、さまざまなサンプルモジュールを起動します。このVisual WebGUIプロジェクトでは、Form1をスタートアップフォームとして設定する必要があります。

 Visual WebGUIでは、同じアプリケーションに対して複数のフォームをスタートフォームとして設定できます。これらのフォームはそれぞれ別のアプリケーションとみなされます。各フォームには、.wgxという拡張子を使って関連する名前を付けることができます。この名前は、フォームの実際の名前と異なっていても構いません。

 スタートフォームを設定するには、まずプロジェクトをビルドします。次に、[プロジェクトのプロパティ]ダイアログボックスを開き、[登録]タブをクリックします。[登録]タブは、Visual WebGUIプロジェクトでのみ表示される特別なタブです(図2を参照)。[登録]タブが表示されない場合は、プロジェクトでVisual WebGUIを有効にする必要があります(詳細については第1回の記事を参照)。

図2 アプリケーションの設定:アプリケーションのスタートアップフォームとして複数のフォームを設定できる。設定はVisual WebGUIプロジェクトの[登録]タブで行う
図2 アプリケーションの設定:アプリケーションのスタートアップフォームとして複数のフォームを設定できる。設定はVisual WebGUIプロジェクトの[登録]タブで行う

 [登録]タブの[アプリケーション]の表で、ソリューションのさまざまな開始位置を設定できます。図2にあるように、最上部のボタンでは、ソリューションで定義されたフォームを選択し、アプリケーション(開始点)として登録できます。2番目のボタンでは、アプリケーションの登録解除や、削除または名前の変更が可能です。3番目のボタンでは、フォームに対応するアプリケーション名を変更できます。例えば、フォームの名前はfrmHumanResources.frmとしたいが、アクセスするときの名前はHumanResources.wgxにしたいとします。この場合、frmHumanResources.frmのアプリケーション名を変更すればOKです。

 Webサーバに配置したアプリケーションにブラウザからアクセスするときには、どのフォームからでもアプリケーションを開始できますが、Visual Studio内で開始するときには、単一のスタートアップWebページを指定する必要があります。これは、[プロジェクトのプロパティ]の[Web]セクションで行います。[開始動作]を[ページを指定する]に設定し、[登録]セクションでVisual WebGUIアプリケーションとして指定した、いずれかのフォームのアプリケーション名を指定します(図3を参照)。

図3 Visual Studioのスタートアップフォーム:開始動作を[ページを指定する]に設定し、Visual Studioでアプリケーションを起動するページを選択する
図3 Visual Studioのスタートアップフォーム:開始動作を[ページを指定する]に設定し、Visual Studioでアプリケーションを起動するページを選択する

イベントを利用した柔軟な構造での設計

 モジュール間で柔軟性のあるやり取りを円滑に進めるために、この例では、2つのデリゲートと、対応するジェネリックEventArgsクラスを使用します。これにより、モジュール間であらゆるデータを受け渡すことができます。EventArgsクラスとそのデリゲートを図4に示します。

図4 ジェネリックイベント:ジェネリックイベント引数のクラス定義
図4 ジェネリックイベント:ジェネリックイベント引数のクラス定義

 WTGenericEventHandlerデリゲートはWTGenericEventArgsと、WTCancelGenericEventHandlerはWTCancelGenericEventと、それぞれ組み合わせて使用します。

 WTGenericEventArgsクラスでは、任意のデータを独自に追加できるため、イベントを発生させるオブジェクトと、そのイベントにサブスクライブするオブジェクトとの間で、データ交換を行いやすくなります。表4はこのクラスのプロパティとメソッドです。

表4 WTGenericEventArgsのプロパティとメソッド
プロパティ 説明
string EventType
  { get; set; }
イベントの識別子または名前を表すオプションの値です。イベントハンドラはこの値に基づいてイベントデータの扱い方を判断できます。たとえば、複数のコンポーネントからのイベントを監視するイベントディスパッチャの場合、どのターゲットコンポーネントがイベントを受け取るべきかを判断するときにEventTypeを使用できます
bool IsEventDataAvailable
  { get; }
イベント引数にカスタムデータがある場合にtrueを返します(たとえば、EventDataメンバを実装したHashtableがnullでない場合、何らかのオブジェクトを保持しています)
メソッド 説明
void AddEventData(
  string key,
  object data)
イベント引数にキーと値のペアでデータを追加します。データは後からイベントハンドラで取り出せます
void RemoveEventData(
  string key)
指定したキーのデータをイベント引数から削除します
void ClearEventData() イベントデータをすべて消去します
bool CheckEventDataExists(
  string dataKey)
指定したキーに対応するイベントデータが存在するかどうかを確認します

 WTGenericEventArgsクラスはインデクサプロパティを実装しているため、イベントデータの設定と取得は、次のコードのように簡単に行えます。

// . . .
WTCancelGenericEventArgs evt = new WTCancelGenericEventArgs();
evt["Name"] = textName.Text;
evt["Age"] = textAge.Text;
evt["City"] = textCity.Text;
string userName = evt["Name"];         // return the name 
// if data for a certain key was not set
// returns  null
string userCountry = evt["Country"];   // userCountry is null

 また、IEnumerableインターフェースも実装しているため、イベントのすべてのデータを取得するときにforeachを使用できます。

 WTCancelGenericEventArgsは、WTGenericEventArgsを継承し、Cancelプロパティを実装しています。IWTModuleのCloseイベントハンドラはWTCancelGenericEventHandler型です。呼び出された側のモジュールから呼び出し側モジュールにイベントデータを渡すだけでなく、キャンセルで終了したかどうかを呼び出し側のモジュールで確認できて便利です。その場合は更新処理を行う必要がなく、キャンセルに対応するための追加的な処理を実行できます。

次のページ
ワークプレースとモジュールを使った処理の実例

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Bogdan Zamfir(Bogdan Zamfir)

 コンピュータ科学で修士号を取得。1993年から独立系コンサルタント兼ソフトウェア開発者として活躍する。Webアプリケーションとデスクトップアプリケーションの両方を手がける。使用言語とプラットフォームは、C#、VB.NET、Visual FoxPro、Microsoft Access、Visual ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4395 2009/09/24 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング