トップスポーツチームの監督に教わる秘訣
この論文では、氏が発見した原則を要約し、その原則をいかにしてソフトウェア開発に応用するかを説明します。
作者 Scott Delap, 翻訳者 編集部 投稿日 2007年11月6日 午後8時50分
先日JBoss SeamがSeam 2.0をリリースした(source)。彼らは8ヶ月前に主要なリリースを行っており、今回のリリースはそれを追うものとなっている。下記はプロジェクトメンバーのNorman Richards氏が挙げた、新しく搭載された機能の中でも注目すべき機能である。InfoQはこのリリースに関して議論するため、プロジェクトリーダーのGavin King氏と対談した。そして私たちはよりよいフレームワークにした2.0について、1.0バージョンから得た教訓とは何か尋ねた。
1.0で犯した最大のミスとは、そして私たちは次にKing氏にExtJS:ExtJSのような何かでプレゼンテーション層全体をブラウザに動かす事に対するJSFコンポーネントに関して伺った。(1)JSF、EJB3、JTAで環境を想定するためにSeamを認可し、開発したこと。間違いなくこれらは全て人気なテクノロジーなのだが、それでもまだ他の環境でSeamを使用したいと思う人々がいてそういう人たちがその実装を始めるよう推し進めたのです。
(2)私たちの内蔵コンポーネントライブラリがどんなに大きく成長するか認識していなかったことです。以前のバージョンでは全ての内蔵コンポーネントを単純にもorg.jboss.seam.core.に全て投げました。Seam2では完全にパッケージ構造を再構築しなくてはならかったのです。
さて、私はここで考えるべき重要なことが二つあると思うのです。InfoQは新たなWeb Beans JSRに関して尋ねた。(1)ユーザーインターフェースを宣言的に、それともプログラム的に定義するのどちらを好むでしょうか?
(2)クライアント側で機能がどのくらい実際に実行できるのでしょうか?
どの程度タイプセーフでいたいかという問題もあります。
これらの疑問はほとんど直交なのです。例えばGWTはタイプセーフでプログラム的でクライアント側のアプローチを提供します。一方Wicketはタイプセーフでプログラム的でサーバ側のアプローチを提供します。
JSFはいくらかタイプセーフの宣言型でサーバ側のアプローチを提供します。またそれには、必要なときにはプログラム的モードで働けるオプションがついてきます。それぞれのアプローチには利点と不利点がもちろんありますが、下記になぜJSFアプローチが素晴らしいかという理由を書いています。
一つ目に、私はユーザーインターフェースを宣言型の言語内で定義するのをはるかに好みます。ユーザーインターフェースは生まれつき階級型でコードのストラクチャーがそれを反映するようにしたいです。私はSwingスタイルのコードを使用してユーザーインターフェースを作って心地よく感じた事はありません。 この種のコードはいつも醜く保持するのが困難なものなのです。それは少しDOMツリーを通ってXMLを解析するJavaコードみたいです。そこには基礎的な構造の未結合が存在しているのです。
もちろんインターフェースの動的部分にはプログラム的操作は実用的です。しかしこれは確実に常識なケースではありません。ほとんどのユーザーインター フェースは個々のコントロールのレベル以外では極端に静的なのです。そしてもちろんJSFはブラウザのDOMと一緒に動作するJavaScriptコードの記述に戻ることもできるのです(最近ではJSFコンポーネントツリーへのクライアント側でのアクセスを可能にするJSF実装を作るのが可能ですが、私たちはまだそこに辿り着いていません。)。
二つ目に私はより多くのステートとクライアント側でのアプリケーションロジックをより多く実行すると開発労力をより削減できる、という考え方に同意していません。単にサーバー側でのみ効率的に処理が可能であるという懸念がありすぎるのです。持続性、セキュリティ、データレベル一致性等です。もしアプリケーションコードをクライアント側に持ってくると、ステートレスサービス層、データトランスファーオブジェクト、きめの細かいデータのマニュアルフェッチ、変更点の統合を伴って3、4年前の状態に戻ってしまうことになるのです。ステートフルのコンポーネントを採用し、対話スコープの持続性コンテキスト、つまりは サーバー側のテクノロジーを採用することによって、私たちはこの痛々しいプログラミングモデルから逃れたのです。
RichFacesとSeamを用いて非同期でのフェッチデータ、インタラクティブにビューをアップデートし、非同期にユーザーインタラクションに返答し、インタラクティブに変更を適用する、また全て明確な楽観的処理内で余分で騒々しいボイラープレートなしに、ユーザーインターフェースを作ることができるのです。もちろんJSFとRichFacesを学ぶのには他のアプローチよりも多少労力がかかります。しかしながら長い目でみるとその努力は報われるものなのです。
今日のJSFの基本的なアプローチにおいて一番の弱点はめったにコメントされていません。ビューをモデルに統合するためのELの使用におけるタイプセーフの欠落です。私の理想的な環境はユーザーインターフェースの定義用のタイプセーフで宣言型の言語をサポートするものとなるでしょう。あいにくJavaはそのようなDSLを生成する本当の意味でのサポートがありません。残念です。
Web BeansにはSeamから得たアイディアが盛り込まれています。
- コンテキスト的コンポーネント
- 会話
- ”優先的な”規則を介したコンポーネントオーバードライブ
- Java EEを伴う”深い”統合
- アノテーション統合ベースのインターセプター統合
- イベント告知
一方、Guiceからはアノテーション統合ベースの依存性インジェクションのアイディアを盗み、これには広範囲で影響力のある結論をもたらしました。
Web Beansは”強力なタイピングを伴う疎結合”を強調する、とてもユニークなプログラミングモデルにこれらのアイディア全てを混入します。下記の事項を利用してとても緩い疎結合のアプリケーションを完成することができます。
- クライアントとサーバーライフサイクルを減結合するコンテキスト的なライフサイクルマネジメント(まるでサービスかのように相互作用するステートフルコンポーネント)
- クライアントとサーバ実装を減結合するためのデプロイタイムコンポーネントオーバードライブ
- 消費者からメッセージプロデューサーを減結合するイベント告知
- 分野横断的な技術的懸念を減結合するインターセプター
全てはタイプセーフを犠牲にすることなく成り立っていて、全てはタイプセーフアノテーションを介して行われているのです。もちろんランタイム時にあなたを襲ってくるトリックは隠されていません。
総合的にWeb BeansはSeamの様式の上に成り立っていますが、それはよりさらに素晴らしいものだと思っています。私は素晴らしいエキスパートグループに恵まれて光栄です。
最後に私たちはKing氏に新たなwikiで動いているin.relation.to(サイト・英語)を開発するのに、Seamを使うことによってフレームワークのホールを発見することに繋がったかどうか尋ねた。
バグをいくつかとマイナーな制限をいくつか見つけました。しかしながらWikiが持っている一番大きな影響力はSeam用のプラグインアーキテクチャの開発のために私たちを奮い立たせたところにあるのです。原文はこちらです:http://www.infoq.com/news/2007/11/seam20
12/16 ~野村総合研究所が提案~ 「不況を乗り切る!効果的なIT投資を考えるセミナー」
ITマネージャ必聴!IT活用セミナー 勝ち残りの法則~管理・統合化スペシャル~
【無償】「Google Apps 企業向けソリューションセミナー」のご案内
この記事では、私達がどのようにして大規模(240人月、10万行強)でインドとオランダの開発者も参加したスクラム・プロジェクトを成功させたのかを示しています。
Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。参加者はカンファレンスで各々の発表や、各セッションへの参加、諸外国のエンジニアとの出会い、ステージ上で DearXPを熱演などの様々な思い出を抱えて、無事日本に戻ってきました。
マイクロソフトのRobert Bellが、SilverlightとJavaを使用したインターオペラビリティのシナリオを紹介し、サンプルコードを例にとってアーキテクチャの手引きを提供します。
Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。サブミッションが選択された人、そうでない人も含めて、個々の目的意識の確認、膨大なプログラムから聞きたいセッションの選択、旅行の準備、プレゼンテーションの準備の期間を終えて、無事当日を迎えました。
筆者はアジャイルソフトウェア開発についての年に一度の国際会議であるAgile2008に初めて参加してきました。今年の日本からの参加者の数は14名にも及び、発表者は5名、受け持ったセッションは8つに及び、例年にない活躍を見せました。なぜ今年のAgile2008では、これほど多くの日本人が参加し発表に至ったのか? そのレポートをお届けします。
エスエムジーでは、Java全般を対象にしたトラブルシューティングサービス「JaTS」を提供しています。この記事では、前回に引き続き、JaTSにて蓄積したトラブル事例とその解決ノウハウの一部をお送りしている「Javaトラブルシューティングメールマガジン」(JTSMM)の総集編として、過去2ヶ月のトラブル事例と追加情報をダイジェストとして提供いたします。
この記事では、モデル駆動アプローチがうまく機能しない、または機能しなくなることによって期待した結果が実現できなくなる 8 つの理由について書きたいと思います。
No comments
返信