Coldfusion - the Best Practice sdc 技術研究会 Coldfusion user Group いまい ※ featuring Coldfusion MX7.

Slides:



Advertisements
Similar presentations
1 情報基礎 A 第 9 週 プログラミング入門 VBA の基本文法 1 準備・変数・データの入出力 徳山 豪・全 眞嬉 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
Advertisements

Ruby on Rail の紹介 石渡正樹 Ruby on Rails とは? スクリプト言語 Ruby で書かれた web アプリケー ションフレームワーク 作者 –Devid Heinemeier Hansson という人だそうです ( 詳 しいことは知りません.
Web アプリケーション開発 ~図書館管理システム~ 北海道情報大学 情報メディア学 部 情報メディア学科 新井山ゼミ 高橋 隼.
1 安全性の高いセッション管理方 式 の Servlet への導入 東京工業大学 理学部 千葉研究室所属 99-2270-6 松沼 正浩.
MOSA プログラミングセミナー Mac OS X プログラミング 事始め 新居雅行( MOSA 理事) 2002/4/28.
「図書管理」のための Webアプリケーション開発 -Apache/Tomcat/MySQL/Java on Windows XP-
Windows Workflow Foundation of .NET Framework 3.0
IIS 4.0で開発をするコツ Webアプリケーション構築.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
ZKプラグインで、Grailsの Viewをリッチに楽しく
PROCESS 14:一般情報(2) InstallShieldLecture
プログラマのレベルアップ.
2004年度 サマースクール in 稚内 JSFによるWebアプリケーション開発
第3回参考文献発表 PHP言語 岩永逸平.
情報理工学部 情報システム工学科 3年 H 井奈波 和也
JPAを利用した RESTful Webサービスの開発
JavaScript プログラミング入門 2006/11/10 神津.
2006年11月22日 植田龍男 Webサービス II (第9回) 年11月22日 植田龍男.
.NET テクノロジー を利用した SAP ソリューションの拡張 (3階層化) (評価環境構築ガイド)
名古屋大学大学院人間情報学研究科 物質生命情報学専攻 情報処理論講座 原 崇
Mavenによる プロジェクト管理 近畿大学理工学部 情報学科3年  小野実.
稚内北星学園大学 情報メディア学部 助教授 安藤 友晴
第4回 個人の動画配信補足のためのWeb構築
卒研:データベースチーム 第4回 DOMを使った処理
タグライブラリとJSP J2EE I 第10回 /
JavaScript Language Update
PHP Framework Update symfony 編 株式会社ディノ 月宮紀柳.
ノンプログラマのための Selenium de DDT はじめの一歩
はじめてのASP.NET 楽しいアプリ制作の会 #1 TWorks.
HTTPプロトコルとJSP (1) データベース論 第3回.
JSFによるWebアプリケーション開発 第6回
HTTPプロトコル J2EE I 第7回 /
Day3 Day4 Day3 Day4.
JSPの作成 J2EE II 第3回 2005年4月10日.
.NET テクノロジー を利用した SAP ソリューションの拡張 (3階層化) (評価環境構築ガイド)
データベース設計 第9回 Webインタフェースの作成(1)
Javaによる Webアプリケーション入門 第5回
第8章 Web技術とセキュリティ   岡本 好未.
2004年度 サマースクール in 稚内 JavaによるWebアプリケーション入門
2003年度 データベース論 安藤 友晴.
概要 Boxed Economy Simulation Platform(BESP)とその基本構造 BESPの設計・実装におけるポイント!
Windows Azure (CTP) 触ってみた
Webアプリケーションの方向性 データベース論 第13回.
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
2006年度 東京サテライト校 エンタープライズ・アプリケーション II
.NET Framework 3.0 概要 (旧称 : WinFX)
Jakarta Struts (2) ソフトウェア特論 第11回.
職務経歴書・スキルシート (職種:職種を記載してください).
Javaによる Webアプリケーション入門 第2回
ゲーム開発モデルの基礎.
JAVAについて 高橋 雅哉.
Windows Azure (CTP) 触ってみた
Javaによる Webアプリケーション入門 第11回
Htmlの基本.
JSFによるWebアプリケーション開発 第3回
北海道情報大学 情報メディア学部 情報メディア学科 新井山ゼミ 金子拓磨
★C++/オブジェクト指向実践企画★ Othelloゲーム作成
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
WebアプリケーションとTomcat ― これまでの復習とこれからの予習 ―
JSPの基本 データベース論 第2回.
Jakarta Struts (1) ソフトウェア特論 第10回.
稚内北星学園大学 情報メディア学部 専任講師 安藤 友晴
JSPの基本 J2EE I (データベース論) 第8回 /
CO-Client Opeartion 1.1 利用履歴データベースの設計 (スキーマ バージョン 対応)
第2回 Webサーバ.
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
Microsoft Office Project Server 2007
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
C#プログラミング実習 第1回.
MVCモデル2による Webアプリケーション
Presentation transcript:

Coldfusion - the Best Practice sdc 技術研究会 Coldfusion user Group いまい ※ featuring Coldfusion MX7

Coldfusion  概要  Adobe システムズ産  最新バージョンは【 Coldfusion 8 】  つまるところは  Application framework / Application server

Coldfusion  概要続き  実装言語  CFML / ActionScript  仕様  JavaEE 準拠 .NET 上でも稼動可能。( 8 から?)  Apache / MS-IIS の上で稼動する。

Operating System JavaEE 準拠 Coldfusion Web server (Apache / IIS) Application server (JRun) Coldfusion Engine ざっくりアーキテクチャ・モデル

Coldfusion の特徴 1.良い部分  Javaライブラリが使用可能。 .NET/JavaEE などの Platform に依存しな い。  PDF の生成など取扱いが容易。  なにげに一番の目玉かも。  Flash との親和性が高い。

Coldfusion の特徴 2.悪い部分  サーバが有償。  開発環境は無償。  適当な IDE がない。  Dreamweaver はあるけど有償だし。  CFEclipse→Eclipse3.3(Europa) で稼動しない事を確 認済 orz  結局、 HTML/JavaScript からは逃げられない。  Flash を使うにはイマイチ「お得感」がない。  でも、おかげで Ajax とか使える。  OSS:ajaxcfc とか  Coldfusion8 からは標準装備。

Coldfusion の特徴 2.悪い部分  MS-Excel をサポートしてない。  まぁ当然。  ドキュメントが不足気味。  Web 上では少ない。  書籍も少ない。  ・・・個人的には、 CFML リファレンスで十 分だと思うケド。

Coldfusion の特徴 3.微妙な部分  OSS ではない。  テクノロジーが隠蔽されている、というセ キュリティ要素がある。  本当に知りたいことは調べようがない。  実は ”cfusion.jar” なんてあったりするから、 jad で デコンパイルすると何かつかめるかもw  言語仕様が簡単。  後述!

CFML  スクリプト言語  タグで記述。  大文字 / 小文字を区別しない。  WindowsOS 上ではね。  Linux 上だと当然区別する。  動的プログラミング言語  ・・・と、一般には認知されている。  要は java.util.Map の ConcreteClass が全てを支配して いると思えば良い。

CFML (実装例) ■ ローカル変数の宣言 --JavaScript var operand; --Java char operand; --CFML ■ 単純な文字列比較 --JavaScript var operand1 = “test”; var operand2 = “test.”; var result = (operand1 == operand2) --Java String operand1 = “test”; String operand2 = “test.”; boolean result = operand1.equals(operand2); --CFML ■ テーブルの記述 --HTML No Title *ループ* *カウンター* *タイトル* *ループ* --CFML * SELECT 文* #xx.No# #Title#

CFML の特徴  タグベース  JSP- カスタム・タグに類似。  トレーニング・コストが比較的低い。  制御文が理解できていれば実装はできる。  あくまで比較的。。。  XML パーサで解析できない!  って、おいーーーー(怒怒怒怒)!!

ActionScript  元々は Flash 向けのプログラミング言語。  Adobe Flex でも使用。  詳しくはリファレンスを!  Imai はあまり知らないです。  つまり、ある程度の機能なら CFML だけで十分と いうこと。

Imai が考える開発ツールとして の Coldfusion  使いどころ(要件編)  HTML ベースの Web-UI を提供する。  CFML を用いてサクサク開発可能。  ・・・落とし穴もある。  サクサク作れる=メンテナンス性の低いものが作 られる覚悟は、しておいた方が良い。  Flash を使う場合  Flex 使った方が良いかも。

Imai が考える開発ツールとして の Coldfusion  使いどころ(要件編)  Mobile 向けドメインがある。  Mobile 向けライブラリが有償で存在する。  Coldfusion8 では?

Imai が考える開発ツールとして の Coldfusion  使いどころ(対象編)  対象システム  ある程度なら対応可能。  例)中規模までの EC サイト  例)中規模までの社内イントラ・サイト  大規模は、 JavaEE/.NET の方が良いでしょう。  対応不可能。  例)学術計算が必要なシステム  CFML の言語仕様上しかたない。  例)オンライン証券取引システム  パフォーマンス耐性は未知数。  でも、良くはないと思う。

Imai が考える開発ツールとして の Coldfusion  使いどころ(対象編)  トランザクション制御は・・・  ほどほどのものが良い。  JDBC を使っているらしいけど、 ObjectPooling と かきちんとできているか謎。  目だった不具合はまだ見ていませんが。  隠蔽されているので「確認できない不安」がある。

Imai が考える開発ツールとして の Coldfusion  使いどころ(設計~開発編)  上級エンジニアが1人しかいない。  1人いれば、他は新人でも何とかなるかも。  勿論、ならないかも知れない。  「トレーニング」は必須。  みんなが新人 or 低スキル。  論外。  Layer を分けた設計で、更にサクサク開発可能にな る。  逆に設計がきちんとできないと、 PHP や Perl 、 (Classic VB の)など ASP と余り変わらない生産性しか出な い。  きちんと出来れば、 Agile 対応も可能。

そんな Coldfusion の(恐ら く) Best な使い方  Layer を意識した設計/実装を!  M-VC パターンの適用は必須。 MODEL 業務ロジック VIEW 画面 CONTROLLER イベントハンドラ SERVICE

Layer 分割をする意義-1  回帰テストを自動化しましょう。  Java の JUnit 、.NET の xUnit の良さを、この CF にも取り入れる!  作る →TestModule も作る → テスト実施  直す →TestModule を起動 → 確認 →OK♪  画面を触ったテストは、極力避けよう。  人間は誤操作をするし。  めんどいし。

Layer 分割をする意義-2  担当者を分けられるようにしましょう。  画面~イベントハンドラの中の人と、 業務ロジックの中の人は、別の方が良い。  こんな人が向いている(と思う)  画面~イベント  Web に精通してる人  Web に精通したい人  業務ロジック  業務に詳しい人  言われたとおり実装するのが精一杯な人 (ようするに、新人)

Coldfusion の勘所 Application.cfc  Servlet のようなもの  Client ⇔ Server の通信時のイベントに、ロジッ クを割り込ませられる。  ユーザ認証がある場合、 Session 切れ判定に便利。  Global 変数(≒定数)を定義する場所として良い (かも)。  Submit 発生時は、 Form 変数も参照できる。  入力値のサニタイジングに便利。  実は・・・  毎回、 Variable 領域にこのコンポーネントが突っ込 まれるwww

Coldfusion の勘所 Application.cfc  イベント・ハンドラ  onApplicationStart  JRun が起動された時に実行  onApplicationEnd  全ての Session が途切れてから一定時間経過した後に実行  onSessionStart  ユーザから最初にアクセスを受けた際に実行  onSessionEnd  ユーザが最後にアクセスしてから一定時間経過した後に実 行

Coldfusion の勘所 Application.cfc  イベント・ハンドラ  onRequestStart  ユーザが画面上で Submit または画面遷移を行った際に実行  onRequest  onRequiestStart が実行された後に実行  onRequestEnd  ユーザにレスポンスを返す際に実行  onError  エラーが発生した際に実行

Coldfusion の勘所 変数について  Variables 領域の多用は危険。  スレッド内で共有されるので。。。  変数名が被ると更新されてしまう。  ループ・カウンタに使うと泣きを見る。

補足:「 M と VC 」モデル  キホン  いわゆる「 MVC モデル」  M と VC をきっちり分割したいので、あえて ” と ” を追加。  Model  Service/Entity/Dao などを包括。  View/Controller  画面  イメージ  情報表示のための制御文とクエリ  Event Handler  イベント・キャッチ  遷移先画面の振り分け

補足:「 M と VC 」モデル  有名な Jakarta Struts で言うと。。。  Model  Framework としての Struts には含まれない部分  自分で作らないといけない。  View/Controller  JSP と Action,ActionForm,ActionFormBean,struts- config.xml  StrutsServlet は同様に隠蔽されたまま。  多分、 CF 内に Servlet 的なものは存在する。  →JavaEE 準拠らしいから。

補足:「 M と VC 」モデル  目的  Model を xUnit テストが可能なように構成す る。  複雑なロジックを View/Controller から排除す る。

補足:「 M と VC 」モデル  効用  複雑なロジックのテストが自動化可能。  Agile 開発プロセス採択時に絶大かも。  UI だけサクサク開発。  Model の部分は Mock で良い。  業務要件が固まったら、 Model を実装。

補足:「 M と VC 」モデル  残念  View/Controller が泥臭くなるのは仕方がない。  View にクエリがガンガン記載される。  これもしかたがない。  課題  UnitTestingFramework 的なプロダクトが欲 しい。  今のままだと、 TestModule は1つずつ手作り。

ナレッジ集 舐めてかからない!w  CFML は簡単。  でも、それはコードを書くのが簡単なだけ。  Coldfusion は、設計もコーディング規約も、何もサ ポートしてない。  自分たちでやらなきゃ駄目。  むしろ簡単なだけに。。。  可読性の低い訳の分からんコードが量産されやすい。  スクリプト言語だから動くまでエラーは出ないし。  Syntax が意外にいい加減だし。  [ ] も [ ] もどちら も同じように動く。

ナレッジ集 ダブル Submit  Framework はサポートしていない。  自力回避が必要 orz  現時点では、 JavaScript による回避しかないかも。 (以下のような超メンドイ構成が必要になる)  1度目の Submit でフラグを ON  フラグが ON の場合、 Submit を無効化する。  JavaScript を無効化されると万事休す。  JavaScript を使わないと Submit が出来ないようにする。  結果、 JavaScript への依存度が高い HTML の出来上 がり。

ナレッジ集 スコープに気をつける!  スコープの種類  Application  Application が起動されてから終了するまで有効。  どのスレッドからも参照される。  Session  Session が切れるまで保持される。  同一スレッド内からしか参照できない。

ナレッジ集 スコープに気をつける!  スコープの種類続き  Request  Variables  同一スレッド内では共有される。  スレッドが終了(レスポンスが ClientAgent に返却され るまで)し次第、消去される。  Form  Submit イベント時のみ使用可能。  CGI  調査中。

ナレッジ集 スコープに気をつける!  スコープの種類続き  Request  ローカル変数: cffunction 内のみで使用可  または で消滅。  多分 GC にエントリされるだけだと思うけど。

ナレッジ集 オブジェクト指向  オブジェクト指向風に実装は可能。  ただし  パラメータは原則「値渡し」。  オーバーライドは可能。  でも、オーバーロードは駄目。  言語仕様上使えないデザインパターンも ある。  純粋な OOPL じゃないから。

ナレッジ集 ステートレスに!  Session はなるべく使わない。  Coldfusion に限った話じゃないけど。  Web アプリケーションの特性  いつ切断されるか分からない。  切断された後、また接続されるかも知れない。  サーバ・サイドはスレッド乱立。  ただでさえ、アプリケーションでチューニングする余地が少 ない Framework 。  資源 (Memory) を大事に!  Session 変数を3箇所以上で参照 / 更新する場合。。。  管理しきれなくなることウケアイ!  別の方法を考えた方が良い。

ナレッジ集 URL 整合は諦める。  イベント・ハンドラを置くために。。。  cflocation と cfinclude が入り乱れる。  cflocation=URL は遷移先。  cfinclude=URL はそれを使ったイベント・ハンド ラ。  Form 変数は、 cfinclude を使わないと渡せな い。  cflocation は単なるリダイレクト。