「システムはオブジェクト指向 Ruby & Flash」(#005)
福井修@Fsys
【○】本日のお題 MVCモデル を Ruby&ActionScript で実装する ━━━━━━
前回 注1)Flash ActionScriptをオブジェクト指向から見ると で「ActionScript
で 部品化、自律 がよく見える。..ActionScriptでプログラミングすることは、
まさにオブジェクトを操っている実感を得られる」と書きました。
前回までは【 基本編 】ということで、抽象的な説明が多かったのですが、今回
から、【 実践編 】に入って具体的な話しに入って行きます。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ MVCモデル とは
────────────────────────────────────
MVCモデル とは何かと言うと、「ツボによく利くJAVA & DB」の連載の際 注2)
にも言及したのですが、業務ロジック(Model)と表示(View)と制御(Controller)
を分けて扱うと、ユーザインターフェースが変わっても業務ロジックは独立して
扱えるので、広く受け入れられている方式です。
デザインパターンに対して、アーキテクチャパターンという整理がありMVC(アー
キテクチャ)パターンという呼び方もあります。注3)
このあたりは、『ソフトウェア・パターン』という名前で、豆蔵の羽生田栄一氏
が、いろいろまとめておられるので参考になります。注4)
概念は良しとしても、実際のレベルでは、あちらをたてればこちらがたたずを調
整することが必要で、様々な実装があります。
1) (一般の(smalltalkの)) MVC モデル 注5)
2) Javaでの実装
Strutsの MVC2 モデル
Turbineの MVC2+1 モデル
J2EEの MVC モデル 注6)
3) Flashでの実装
Flash + ColdFusion でのモデル 注7)
Pet MarketのMVC構造 注8)
いろいろ奥深いテーマなので、研究もされています。 注9)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ Web-DBアプリケーションのグルーピング
────────────────────────────────────
MVCモデルの話しも、過去のスタンドアロンでの画面プログラムでのパターンと
現在主流となってきているWeb-DBアプリケーションでのパターンでは、当然実装
は変わってきます。ここでは、Web-DBアプリケーションのグルーピングをしてみ
ます。
・ 第一グループ
PerlCGIやServletのみ で サーバサイドで、単一プログラム内でHTMLタグの
編集もDBの処理も混在する形態。
・ 第二グループ
IIS ASPやPHP、JSPを利用し、HTML文書をベースに、プログラムを埋め込み
このなかでDBの処理も混在する形態。
・ 第三グループ
HTML文書とDBの処理を分離して、実装する形態。
見栄え(≒View)はJSP、受付処理は、Servlet、DB処理まわりはBeansなど。
eRubyとRubyの組み合わせなどもこの範疇。
・ 第四グループ
第三グループを発展させた形態。
HTML文書は、できるだけデザイン要素に重点がおける様に(デザイナとの分業
がし易いように)プログラムとは、分離するように工夫。
JSP2.0でのタグライブラリ拡張などを活用しようとする方式です。
また J2EEのEJB導入やStruts,Turbineフレームワークもこの範疇に。
JSF(JavaServer Faces)の動向もありますし、ASP.NETの動向もあります。
WebObjectsのようにDB処理まわりもフレームワークに取り込んだ先進形態も
ありです。
・ 第五グループ
リッチクライアントの必要性を認識し、パラダイムシフトした形態。
見栄え(≒View)はFlashやPDF(Format)など。Microsoft Office Systmもここ
に位置づけても良いかもしれません。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ Web-DBアプリケーションでのMVC実装の問題点と今後
────────────────────────────────────
第一グループは、もう部分的にしか利用されないパターンとなりました。ただ
しこれが基本なので、押さえて置く必要はあります。
第二グループは、現役ですし、これを維持するは勢力はあります。注10)
第三グループも、現役ですし、それなりに、すっきりはしています。
現在 第四グループがホットです。ただ、まだまだ流動的(言い換えるとぐちゃ
ぐちゃ)ですね :-p
私は、第五グループで、Viewは、Flash、Controlは、ActionScript(All Flashの
場合) or Ruby、Modelはもちろん Rubyというのが予算数百万〜クラスでは、適
当だと思います。複雑な要素(CFなど)を除いてお手軽・簡潔に!
予算が潤沢にあり、人月が50越えなら Java/C#..もありでしょうが。
Flash & Ruby の MVC モデルは、以下のようになります。
( ※ 必ず等幅フォントで、ご覧ください )
Client ←─────────→ Server
1) 最初のリクエスト
┏━━━━━┓ リクエスト ┏━━━━━━━┓
┃ブラウザ ┃ ─────→ ┃ コントローラ ┃
┃ ┃ ┃ Ruby ┃
┗━━━━━┛ ┃ ┃
┗━━━━━━━┛
↑ │
│ ┏━━━━━━━┓ │
└──┃ ビュー ┃ ←┘
┃ Flash ┃
┃ ┃
┗━━━━━━━┛
2) 一旦Flashが開かれたあと
クライアント内でのFlash画面遷移は、ActionScriptがコントロール。
サーバサイドまで、影響する挙動に対しては、Rubyがコントロールし
また Rubyのクラスで実装したモデルがDB処理を行います。
┏━━━━━┓ ┏━━━━━━━━┓
┃ブラウザ ┃ ─────→ ┃ コントローラ ┃
┃┏━━━━┻━┳━━━━┓ ← ┃ Ruby ┃
┗┫ビュー ┃ ──┐ ┃ ┃ ┃
┃Flash ┃ ←─┘ ┃ ┗━━━━━━━━┛
┣━━━━━━┛ ┃ ↓↑
┃ コントローラ Action ┃ ┏━━━━━━━━┓ ┌────┐
┃ Script ┃ ┃ モデル ┃ ─→│ DB │
┗━━━━━━━━━━━┛ ┃ Ruby ┃ ←─│ │
┃ ┃ │ │
┗━━━━━━━━┛ └────┘
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ 実装例によるMVCモデル比較
────────────────────────────────────
【 例 】 ブラウザに、今月のカレンダを表示する
【前提条件】
Rubyのインストール済 、Apacheのインストール済
【第一グループ方式 実装例】
下記ファイルを実行可能領域に設置
ex.) http://fsys.net/ruby/cal1.rb
# cal1.rb
#
#!/usr/local/bin/ruby
def create_calendar ( year, month )
nextmonth = Time.at(
Time.local(year, month).tv_sec + 31*24*3600 )
daycount = Time.at(
Time.local(nextmonth.year, nextmonth.mon).tv_sec - 1 ).mday
emptystr = " "
lines = [ sprintf("%8d 年 %d 月", year, month),
" 日 月 火 水 木 金 土" ]
line = nil
w = Time.local( year, month, 1 ).wday
for d in 1..daycount do
line ||= Array.new( 7, emptystr )
line[w] = sprintf( " %2d", d )
if w == 6 then
lines << line.join
line = nil
end
w = (w+1) % 7
end
lines << line.join if w > 0
return lines.join("\n")
end
puts "Content-type: text/html\r\n\r\n"
puts "Calendar"
puts ""
puts create_calendar (2003,10)
puts "
"
【第五グループ方式 実装例】
1. FlashMX インストール 注11)
2. UIコンポーネント セット2をインストール 注12)
3. カレンダーコンポーネントを画面に配置
4. Flash ファイルをパブリッシュ
5. サイトに配置
例)http://fsys.net/ruby/comcal.html
Flashコンポーネントを利用した方法で Flashを View に採用する方式は、リッ
チクライアント実現へとても有利です。
次回は「【 実践編 】サーバサイドで Ruby&PostgreSQL 連携 」です。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
※ 注釈、資料、参考情報
────────────────────────────────────
注1) http://www.melma.com/mag/02/m00020302/a00000621.html
注2) 「ツボによく利くJAVA & DB」(#014)
http://www.melma.com/mag/02/m00020302/a00000290.html
「ツボによく利くJAVA & DB」(#015)
http://www.melma.com/mag/02/m00020302/a00000292.html
注3)『ソフトウェアアーキテクチャー:ソフトウェア開発のためのパターン体
系』フランク・ブッシュマンほか/金沢典子ほか訳 近代科学社,2000
「アーキテクチャ・パターンを理解する」萩本順三・奥村洋氏
JavaWorld 2001年4月号
UMLによるアーキテクチャパターン 萩本順三氏
http://www.mamezou.com/tec/Tips/umlForumJp2001/pdf/UMLArchitecture.pdf
注4) 「ソフトウェア・パターンの射程を知る」羽生田栄一氏
JavaWorld 2001年4月号
「総説パターン -概念と応用」
ドクタードブズジャーナル日本版 翔泳社 1998年10月号
注5) (クラシック)MVCとは
http://www.ogis-ri.co.jp/otc/hiroba/technical/Squeak5/S5-3-1.html
注6) はじめてのBluePrints & J2EEパターン
http://www.gihyo.co.jp/magazines/issue.php/wdpress/Vol08
注7)「ColdFusionMXとFlashMXを用いて操作性の良いWebアプリケーションを開発
しよう」連載 日経Linux 2003年2月〜8月 ワイスリー 安河内 浩二氏
2003年7月、8月に MVCアーキテクチャに言及
注8) Flash Pet Market Blue Print ApplicationにおけるMVCの構造 松村氏
http://faces.bascule.co.jp/flashoop/src/mvctest.zip
注9) 完全なMVCパターン導入の必要性
http://www.fuka.info.waseda.ac.jp/~washi/m_html/node7.html
MVCパターン
http://www.fuka.info.waseda.ac.jp/~washi/m_html/node8.html
注10)日経「検証:ITキーワード」連載
第3回 JavaとWebサービスは夢で終わる 2003/05/27
http://biz-inno.nikkeibp.co.jp/open/article20030527.shtml
注11) マクロメディア社よりトライアル版がダウンロード可能
http://www.macromedia.com/jp/downloads/
注12) UIコンポーネント(下のページ右側にリンク)
2003/10/1 時点では、不明^^;
http://www.macromedia.com/jp/devnet/mx/flash/
UI Components Set2非公式日本語マニュアル
http://hpcgi2.nifty.com/icutommy/fwiki_ja/wiki.cgi?FlashUIComponentsSet2Manual
【プロフィール】
福井 修 ( FUKUI Osamu )o-fukuiアットpo.iijnet.or.jp
福井システムリサーチ http://fsys.net/ 主幹。システム構築歴27年。
システム構築エキスパート
日本リヌクス協会、神戸商工会議所、情報処理学会 会員
関西ソーホ・デジタルコンテンツ事業協同組合員
デジタルハリウッド三宮校 Java講師