Visual WebGUIによるAJAX対応CMS(コンテンツ管理システム)の構築
フレームワークの作成
柔軟なソフトウェアシステムの開発には、強固なフレームワークが不可欠
ダウンロード サンプルソース (148.7 KB)
柔軟なソフトウェアシステムを開発するためには、基本的なシステムサービスを実装した基盤が不可欠です。その基盤に求められるのは、開発者にとっての使いやすさと、複雑なシステムにも対応できるパワーを兼ね備えていることです。本記事では、ソフトウェア開発に不可欠な、強固なフレームワークの作成方法について説明します。
はじめに
本稿では、前回の記事に続き、Mini CMSシステムの構築を進めていきます。このシステムには、ワークプレースの実体を表すベースコンポーネントが必要です。これらのコンポーネントは、ワークプレース内へモジュールをロードして表示したり、モジュール間で制御を受け渡したり、処理終了時にモジュールをアンロードしたりといった処理を担います。モジュールからは、他のモジュールを呼び出したり、パラメータを渡したりできることが必要です。呼び出された側のモジュールは、呼び出し元のモジュールに制御を戻したり、終了ステータス(ユーザーが変更を保存したかキャンセルしたか)を併せて返したりします。呼び出し元のモジュールは、その内容に応じて、自らを更新します。
こうしたフレームワークの柔軟性を高めるためには、インターフェースを使用してコンポーネントを定義するのが1番です。実装の中身が既存の特定のコントロールと密接に結び付くのを避けることができ、将来の拡張や実装方法の変更にも対応しやすくなるからです。
WorkplaceコンポーネントとModuleコンポーネント
アプリケーションの屋台骨となるのが、WorkplaceコンポーネントとModuleコンポーネントです。Workplaceは実際にはコンテナで、各種機能を持つモジュールをこの中にロードできます。ここにロードしたモジュールが、アプリケーションの実際の処理を担うことになります。
WorkplaceとModuleが実装するインターフェースは次のとおりです。
- IWTWorkplace:図1に示すWorkplaceコンポーネントのインターフェースを定義したものです。このインターフェースを実装したコンポーネントを使って、実際のワークプレースを実現します。モジュールのロードと表示、既存のモジュールがロード済みかどうかのチェック、全モジュールの非表示化、モジュールの削除が可能です。このインターフェースのプロパティとメソッドは表1のとおりです。
- IWTModule:Moduleコンポーネントのインターフェースを定義したものです(図1を参照)。すべてのモジュールがこのインターフェースを実装する必要があります。プロパティとメソッドは表2のとおりです。
| プロパティ | 説明 |
| Control BodyPanel{ get; } | ワークプレースのコンテナの役割を果たすコントロールへの参照を返します。Visual WebGUIでは、Controlから派生したすべてのコンポーネントがControlsプロパティ(ControlsCollection型)を公開する必要があります。このプロパティは、中に含むすべてのコントロールを保持するものです |
| string Caption { get; set;} |
コンテナのキャプション値を設定または取得します。IWTWorkplaceをHeaderedPanelまたはGroupBoxとして実装することで、GroupBoxのタイトルのラベルまたはHeaderedPanelの見出しを設定できます |
| メソッド | 説明 |
| IWTModule LoadModule( IWTModule module, IWTModule parentModule) |
モジュールをアクティブモジュールとしてロードし、そのモジュールへの参照を返します。第2パラメータのparentModule,には、親のIWTModuleモジュール(このモジュールの起動元となるモジュール)への参照を指定します。つまりparentModuleパラメータでは、新しくロードしたモジュールの終了後にどのモジュールをアクティブにするかを制御できます。またparentModuleにはnullも指定できます。その場合は、現在のモジュールには親はないという意味になります。IWTWorkplaceの最初のモジュールの場合や、これまでにロードした他のモジュールとの間に依存関係がない場合には、nullを指定するとよいでしょう |
| IWTModule LoadModule( IWTModule module, IWTModule parentModule, bool loadVisible); |
上のメソッドとほぼ同じですが、非表示でのモジュールのロードにも対応している点が異なります。ロードしたモジュールを表示する前にプログラムで追加的な処理が必要な場合には、非表示でのロードが便利です |
| void ShowModule( IWTModule module); |
ロード済みのモジュールをアクティブ化します |
| bool CheckModuleExists( IWTModule module); |
指定したモジュールがIWTWorkplaceに読み込み済みかどうかをチェックします |
| void RemoveModule( IWTModule module); |
指定のモジュールをIWTWorkplaceから削除します |
| void HideAllModules(); | 全モジュールを非表示にします |
| プロパティ | 説明 |
| IWTModule CallerModule { get; set; } |
呼び出し元のモジュールへの参照を取得または設定します。呼び出し元のモジュールのプロパティやメソッドにアクセスするときに使用できます |
| IWTWorkplace HostWorkplace { get; set; } |
モジュールをロードしたワークプレースコンポーネントへの参照です |
| メソッド | 説明 |
| void Refresh( WTCancelGenericEventArgs e) |
このメソッドは、IWTWorkplaceコンポーネントがモジュールを終了して呼び出し元モジュールに制御を返すときに呼び出す必要があります。モジュールの終了時にはCloseイベントが発生し、WTCancelGenericEventArgs型の引数が渡されます。ワークプレースはRefreshメソッドを呼び出して、この引数を呼び出し元のモジュールに渡します |
| event WTCancelGenericEventHandler Close; | IWTModuleの終了時に発生するイベントです |
IWTModuleとIWTWorkplaceの間のやり取りを制御するのがWTWorkplaceControllerクラスです。表3に示す静的メソッドのみを持ち、モジュールとワークプレースの橋渡しとなります。
| メソッド | 説明 |
| public static IWTModule LoadModule( IWTWorkplace workplace, IWTModule module, IWTModule parentModule, bool loadVisible) |
ワークプレースにモジュールをロードします。親モジュール(現在のモジュールの起動元のモジュール)の指定と、ロードするモジュールの表示/非表示の指定も可能です |
| public static void ShowModule( IWTWorkplace workplace, IWTModule module) |
ワークプレースにロード済みのモジュールを表示します |
| public static void RemoveModule( IWTWorkplace workplace, IWTModule module) |
ワークプレースからモジュールを削除します |
| public static void HideAllModules( IWTWorkplace workplace) |
ワークプレースの全モジュールを非表示にします |
| public static bool CheckModuleExists( IWTWorkplace workplace, IWTModule module); |
モジュールがワークプレースにロード済みかどうかを調べます |
この記事は参考になりましたか?
- japan.internet.com翻訳記事連載記事一覧
- この記事の著者
-
japan.internet.com(ジャパンインターネットコム)
japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
Bogdan Zamfir(Bogdan Zamfir)
コンピュータ科学で修士号を取得。1993年から独立系コンサルタント兼ソフトウェア開発者として活躍する。Webアプリケーションとデスクトップアプリケーションの両方を手がける。使用言語とプラットフォームは、C#、VB.NET、Visual FoxPro、Microsoft Access、Visual ...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア

