プレゼンテーションレイヤーの フレームワーク実装

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
◆ユーザープロセスコンポーネント