Seasar Conference
Seasar Conference
2006 Autumn
2006 Autumn
GUI
GUI
プレゼンテーションフレームワーク
プレゼンテーションフレームワーク
S2JFace
S2JFace
~
~なぜ、あなたは
なぜ、あなたは
Web
Web
アプリケーションを作り続けるのか
アプリケーションを作り続けるのか
~
~
2006.11.12
エスエムジー株式会社 小森 裕介
([email protected])
株式会社グルージェント 亀谷 大樹
([email protected])
はじめまして!
はじめまして!
•
•
名前:
名前:
小森
小森
裕介
裕介
•
•
Blog
Blog
:
:
http://d.hatena.ne.jp/y-komori/
•
•
所属:
所属:
エスエムジー株式会社(http://www.smg.co.jp)
エスエムジー株式会社
•
•
主な仕事:
主な仕事:
– Javaによる集中監視制御システム設計・開発
– 教育・各種執筆活動
•
•
Seasar2
Seasar2
とのかかわり
とのかかわり
– S2JFaceコミッタ、S2Containerコミッタ、S2JMSコミッタ
•
•
名前:
名前:
亀谷
亀谷
大樹
大樹
•
•
Blog
Blog
:
:
http://d.hatena.ne.jp/dkameya/
•
•
所属:
所属:
株式会社グルージェント(http://www.gluegent.com)
株式会社グルージェント
•
•
主な仕事:
主な仕事:
–
–
OSS開発
OSS
開発
•
•
Seasar2
Seasar2
とのかかわり
とのかかわり
– S2JFaceコミッタ
はじめに
はじめに
• Webアプリケーション開発でこんな思い、
したことありませんか?
『え~! なんでこんな
複雑なGUI
作らなきゃいけないの?』
『・・・そもそも、このシステム
Webでやる意味あるの?』
『
Ajax
を広めた
G○○gleなんか、大嫌いだ!』
そんな悩める
Javaエンジニアに
福音です!
そんな悩める
Javaエンジニアに
福音です!
Web
Web
アプリケーション開発の問題点
アプリケーション開発の問題点
• Thinクライアントであるがために複雑な画面がつくりにくい
– Ajaxの普及で技術的には可能性が増えた
• 案件の多くを占める業務システムは「Web」である必要性
がない
– 多くがイントラネット内で利用されるため、利用者が限られている
– 「Web」である縛りが
画面デザインの自由度を下げ
、
開発の難易度を上げて
いる!
– Webが必要なのは「
クライアント管理が不要
」だから
– 今ならば JavaWebStart など、代替技術がある
なぜ、あなたは
Webアプリケーションを作り続けるのか?
なぜ、あなたは
Webアプリケーションを作り続けるのか?
GUI
GUI
アプリケーション開発の問題点
アプリケーション開発の問題点
•
(Javaによる)
適当な
フレームワーク
が存在しない
• 画面
を作るのが
面倒
– GUIエディタも存在するが
(特にJavaでは)
使いやすいものがない
• 画面デザインとロジック開発の
分担がしにくい
– プログラムがわからないと画面がつくれない
(HTMLならプログラムがわからなくても画面がデザインできる)
開発手法がある程度確立している
Webアプリケーションとして作らざるをえない
開発手法がある程度確立している
Webアプリケーションとして作らざるをえない
システム開発における作業分担
システム開発における作業分担
•フロントSE
−顧客と話し合って要件&画面仕様を詰める
−コーディングはしない
−HTMLモックなら書ける?
−画面仕様はWordやExcelで書くことが多い
•開発者
−画面仕様に沿って実際の画面を作成
−複雑な画面仕様に頭を抱える
−バリバリコーディング!
大規模なシステムほど分担がはっきりする
プレゼンテーションとロジックの分離
プレゼンテーションとロジックの分離
• S2JSF
(Teeda)
におけるプレゼンテーションとロジックの分離
•フロントSE
−仕様を決めてHTMLモックを作成する
•開発者
−HTMLモックを元に実際の動きをつける
HTMLモックが
中間成果物になる
HTMLモックが
中間成果物になる
HTMLモック
GUIの世界でもこのような分離ができるようにしたい
GUIの世界でもこのような分離ができるようにしたい
S2JFace
S2JFace
とは
とは
• XMLによる画面作成
を可能としたGUIフレームワーク
• S2JSFライクな画面と
データのバインディング
をサポート
• もちろんロジックは
POJO
でOK
画面定義XML
S2JFace
POJO
XMLを元に
画面を表示
XMLを元に
画面を表示
双方向の
データバインディング
双方向の
データバインディング
プレゼンテーション層
プレゼンテーション層
S2JFace
S2JFace
のアーキテクチャ
のアーキテクチャ
Java 5.0
Java 5.0
S2Container 2.4
S2Container 2.4
S2JFace
S2JFace
• ソフトウエア構成
ビジネスロジック層
ビジネスロジック層
データアクセス層
データアクセス層
POJO
S2Dao等
• 論理構成
S2JFace
S2JFace
を意識するのはここだけ
を意識するのはここだけ
!
!
従来の
Webアプリケーションと
同じでOK!
SWT
SWT
JFace
JFace
るGUIツールキット
Eclipseの提供す
&フレームワーク
Eclipseの提供す
るGUIツールキット
なぜ
なぜ
SWT & JFace
SWT & JFace
?
?
•
•
見た目
見た目
– Windowsネイティブのコンポーネントを利用しているため、画
面上の違和感がない
•
•
速さ
速さ
– Swingに見られるもたつきが少ない
•
•
実績
実績
– Eclipseで培われた実績
– JFaceによる開発のしやすさ
•
•
プラットフォーム・ポータビリティ
プラットフォーム・ポータビリティ
– Swingに比べればポータビリティは多少下がる
– 業務アプリケーションクライアントの大半がWindowsである
現状を考えるとほとんど問題にならない
S2JFace
S2JFace
での画面定義
での画面定義
• 独自のXML形式で画面を記述
• HTMLに似た構文のため、覚えやすい
• XMLには
画面デザイン以外の情報を持たせない
のがポリシー
•Eclipse-WTP付属のXMLエディタで補完しな
がら記述が可能
•将来的にはGUIエディタも提供予定
<?xml version="1.0" encoding="UTF-8"?> <template xmlns="http://s2jface.sandbox.seasar.org"> <window title="従業員情報編集" width="400" height="300"><gridLayout numColumns="1"> <gridData horizontalAlignment="FILL" /> </gridLayout> <composite> <gridLayout numColumns="2"> <gridData horizontalAlignment="FILL" /> </gridLayout> <label text="従業員No." /> <text id="empNo" /> <label text="役職" /> <text id="job" /> <?xmlversion="1.0"encoding="UTF-8"?> <templatexmlns="http://s2jface.sandbox.seasar.org"> <windowtitle="従業員情報編集"width="400"height="300">
<gridLayoutnumColumns="1"> <gridDatahorizontalAlignment="FILL"/> </gridLayout> <composite> <gridLayoutnumColumns="2"> <gridDatahorizontalAlignment="FILL"/> </gridLayout> <labeltext="従業員No."/> <textid="empNo"/> <labeltext="役職"/> <textid="job"/> <label text="管理者" /> <text id="manager" /> <label text="給与" /> <text id="salary" /> <label text="部署" />
<combo id="department" style="DROP_DOWN, READ_ONLY" /> </composite>
<composite>
<fillLayout type="HORIZONTAL" /> <button id="ok" text="OK“ />
<button id="cancel" text="キャンセル“ /> </composite> </window> </template> <labeltext="管理者"/> <textid="manager"/> <labeltext="給与"/> <textid="salary"/> <labeltext="部署"/>
<comboid="department"style="DROP_DOWN, READ_ONLY"/> </composite>
<composite>
<fillLayouttype="HORIZONTAL"/> <buttonid="ok"text="OK“/>
<buttonid="cancel"text="キャンセル“/> </composite>
</window> </template>