A p p Application Architecture for .NET の利用例 l i c a t プレゼンテーションレイヤーの フレームワーク実装 i 第1 0回 株式会社CSKシステムズ IT生産技術部 中垣 健志 o NAKAGAKI, Kenji n 今日はN君の会社の仕事始めです。 A はじめに r c 「新年明けましておめでとうございま h す!」 ションで実現した機能をフレームワ 休み中は地元に帰ってのんびりして ークに取り込んでいきましょう。今回 いたN君ですが、心機一転して仕事に は、プレゼンテーションレイヤーで提 取り組んでいこうと思っています。さ 供する機能を設計していきます。 プレゼンテーションレイヤーが果た 早いうちに、フレームワークを完成さ す役割は、ユーザーとアプリケーショ せる必要が出てきました。なぜなら ンとの対話を実現することです。ユー ば、.NET Frameworkを使った大き ザーからの問い合わせを受け付けて なプロジェクトが、また始まりそうだ ビジネスロジック以下の処理を呼び からです。そのプロジェクトにタイム 出し、処理結果を再びユーザーへ返 Technology Tools リーにフレームワークを提供できれ すということの繰り返しです。プレゼ Visual Basic ば、今後受注する他のプロジェクトに ンテーションレイヤーは、内部的に Visual C# も、どんどんフレームワークを採用し 以下の2つのコンポーネントにより実 Visual C++ てもらえそうです。 現されます。 i て、いきなりですが、今年のなるべく t Level e c 1 2 3 4 5 t u r e SQL Server 去年は、Soarアプリケーションの成 f o r Oracle 果のうちの半分くらいをフレームワー ①ユーザープロセスコンポーネント Access ク化することができました。もうひと ユーザーインターフェイスが 提供す ASP.NET がんばりすれば、フレームワークとし る、複数のインターフェイスの処理順 Other: ての基本機能を全部提供できそうで 序を管理するコンポーネント。たとえ す。N君と一緒にがんばりましょう! ば、「本を検索する画面」「購入者の Visual Studio .NET 2003 . 情報を入力する画面」 「確認画面」と N Samples E T この記事で取り上げたソースコードおよび サンプルプログラムは、 http://www.shoeisha.com/mag/windev/ からダウンロード可能です。 フレームワークを 設計する 前回に引き続き、Soarアプリケー 144 Windows Developer Magazine いう3つの画面を経て書籍を購入する 機能の場合、3つの画面(≒ユーザー インターフェイス)が正しい順序で遷 移することを、ユーザープロセスが実 ザーが同時にアクセスします。そのため、これらのユー ユーザーに対して、目に見えるインターフェイスを提供 ザーごとにひとつのインスタンスを用意しなければなり するコンポーネント。画面や帳票のデザインといった出 ません(図1) 。 Webアプリケーションにおけるインスタンスの数の関 プロードによる入力要素を担当する。エンタープライズ 係は、開発中にひとりでしかアプリケーションを動かし システムを構成するコンポーネントのうち、もっともユ ていないと発見しづらいものです。Webアプリケーショ ーザーに近い場所に配置される。 ンは常に複数のユーザーが利用することを前提にして、 f 力要素と、キーボードからの直接入力やファイルのアッ r . ②ユーザーインターフェイスコンポーネント E しているひとつのアプリケーションの中で、複数のユー N です。しかし、Webアプリケーションの場合には、稼動 o 現することになる。 T プレゼンテーションレイヤーのフレームワーク実装 設計と実装を行なう必要があるのです。 より具体的にいえば、画面間で受け渡される情報の管 理、および画面の遷移そのものの管理を行ないます。 「コンテキストクラス」を用意する方法があります。 コンテキストとは一般的に「文脈」という意味で使わ れますが、オブジェクト指向でクラスを設計するときに ンでは、複数のインターフェイスでユーザープロセスを は「特定の単位で常にひとつしか存在しないクラス」と 共有する方法を採用しました。さらに共有場所として、 いう意味合いで使われることが多いです。たとえば.NET hiddenタグ、ViewState、Cookie、セッションの4つに FrameworkにはSystem.Web.HttpContextというクラス ついて検討し、その結果「セッション」を用いることを があります。このクラスは、ユーザーからのHTTPによ ・画面でユーザープロセスを取得する仕組み このクラスからプロセスを取得するようにします(図2) 。 をSoarフレームワークとして提供することにします。 図1:ユーザープロセスはアプリケーション単位でシングルトンで はない 方法を考えます。ユーザープロセスクラスは、機能の数 ユーザープロセスクラスは、それぞれひとつのインスタ ンスだけ作成されるようにします。ここでデザインパタ プロセス1 ユーザーBの セッション プロセス1 c ーンをご存知の方は「ひとつだけのインスタンス」と聞 プロセス2 プロセス2 i いて、シングルトンパターンを使えるのではと考えるか l もしれませんが、ここでは誤りです。 注1)本誌2005年9月号の本連載(ユーザーインターフェイスを実装す る 後編)を参照。 p シングルトンパターンは、アプリケーション単位でイ ンスタンスがひとつであることを保障するための仕組み c i ユーザーAの セッション t だけアプリケーションで定義されます。そしてすべての Webアプリケーション a まず、セッションの中にユーザープロセスを保存する r かないユーザープロセスコンテキストクラスを用意して、 o ・セッションでユーザープロセスを共有する仕組み A ザープロセスの場合にはセッション単位で常にひとつし n るリクエスト単位で常にひとつしか存在しません。ユー 各ユーザーごとの セッションでは 同じプロセスのインスタンスは ひとつしか 存在しない ひとつのWebアプリケーション としてみると プロセス1のインスタンスは 複数存在している 2006 February 145 p 。そこで、 A 決めました [注1] h i t 画面間で情報を受け渡すために Soarアプリケーショ r 合の常套策のひとつとして、ユーザー単位で作成される u ーインターフェイスの関連を調整する役割を持ちます。 t るためにはどうすればよいでしょうか? このような場 c ユーザープロセスコンポーネントでは、複数のユーザ e では、ユーザーのセッション単位でプロセスを管理す e ◆ユーザープロセスコンポーネント
© Copyright 2024 Paperzz