GAE開発の落とし穴
Googleのクラウド環境をつかったGoogle App Engineによる開発するにあたり、初めての試みで苦悩する開発者達の経験をもとに、各開発フェーズにあわせて問題点やどう解決したかをご紹介します
ブックマークされました!
ブックマークがエラーになりました。もう一度お願いします。

作者 Ganesh Prasad, Peter Svensson , 翻訳者 渡辺 裕之 投稿日 2008年7月15日
私達はプレゼンテーション(層の)技術に関する現時点での見解を徹底的に見直さなければなりません。というのは、何年にも渡ってさまざまな制約が加えられていたことでIT業界では正道から外れたデザイン・パターンがまるで当然であるかのように考えられているからです。このことが現代においてもよいアプリケーションを作ることの大きな障害となっているのです。この記事では、(静的なWebサイトの対照としての)Webアプリケーションが特徴となるシン・クライアントのパラダイムは"その場しのぎの解決策"であり捨て去らなければならないと考えています。なぜこのようなことを言うのか理解していただくためにインターネットが広まり始めた90年代半ばに立ち戻りましょう。
インターネットが一般に広まるに連れ、ほぼ同時に2つの相反する発展がありました。(1)アプリケーションを少ない労力で簡単に配布できるという意味でユビキタスなクライアント・サイドの"アプリケーション・プラットフォーム"としてのブラウザの圧倒的な重要さと(2)同じプラットフォーム(ブラウザ)から多くの可能性を奪ったベンダー依存による分裂です。後述するNetscape社とMicrosoft社によるブラウザ戦争によって(リンク)、2つの製品群はwebのレンダリングとJavaScriptコードの実行において全く異なる挙動をとるようになってしまったのです。webアプリケーションがもう片方のブラウザで動かないということが頭にくるくらい一般的でした。一方ではインターネットを通してユーザにアプリケーションを配布するという要求が増大し、もう一方ではその配布先が信頼性の低いプラットフォームであるという状況に直面して(IT)業界にいったい何ができたでしょう。
最も一般的なアプローチはブラウザの最小限の機能―シンプルな形式のwebページのレンダリング、ハイパーリンク、フォームの送信、などなど―だけに依存するということでした。そして全てのプレゼンテーション・ロジックをサービス提供側がコントロールできるシステムの一部―Webサーバへと移動したのです。ビジネス・ロジックとプレゼンテーション・ロジックを一つのプラットフォームに融合させる複雑さを補助しようと多くのサーバ・サイドのwebフレーム・ワークが登場し始めました。これらのフレーム・ワークの中ではStrutsが初期の成功例になるでしょう。今日では実に50以上ものフレーム・ワークが存在していて、それぞれが他の製品に対する優位性を主張しています。
しかし、このようなフレーム・ワークの影響については置いておきましょう。(フレーム・ワークは)確かにサーバ・サイドのプレゼンテーション・ロジックに秩序をもたらし合理化しましたが、それはただその場しのぎの解決策を不滅の物にしただけなのです。プレゼンテーション層の凝集度は低いです。なぜならプレゼンテーションに関する責務は、アーキテクチャに無意味な筋違いの理由により、ブラウザとwebサーバに分断されているからです。同時に、サーバ・サイドにあるプレゼンテーション・ロジックとビジネス・ロジックの結合度は高いのです。とりわけ最近のwebフレーム・ワークはサーバ・サイドのテンプレート、設定ファイル、アノテーションといった様々な要素からクライアント(へ渡す情報)をサーバ上で生成しています。これによって本来分かり易いはずの(アプリケーション)構築が複雑になっているのです。今となってはwebフレーム・ワークは不要だというだけではありません、それ(フレーム・ワーク)がどのシステムでも標準のコンポーネントとして容認されていることが、より良いアプリケーション構築をしようという私達の努力の足かせとなっているのです。
歴史を打ち破る開発方法が直近だけで少なくても3つあります。
一般的なアーキテクチャ・モデルであるSOFEA(サービス指向フロント・エンド・アーキテクチャ)を通してこれら全ての進化の恩恵に授かることができます。面白いのは、シン・クライアントやwebモデルの陰に隠れていた、リッチ・クライアントという古いパラダイムがその両者を上回るよいアーキテクチャへの道筋を示しているということです。
新しいモデルの基本的な原理はプレゼンテーションの関心事をビジネス・ロジックの関心事から切り離すことです。ビジネス・ロジックの関心事についてはSOAの原理の範疇にあります。従ってプレゼンテーション層は、明確に定義されたサービス・インタフェースを通してサービス指向のビジネス層と適合していなければなりません。SOAをアーキテクチャ的に離れた2つの領域(それがマーケティングや金融であろうと、"レイヤ"という技術的な領域であろうとも)間における明確に設計された構造化データの交換であると捉えると、プレゼンテーション層がこのような原理から除外される理由がありません。
このような適合性における重要な要素の一つはアプリケーションの入口から出口までデータの完全性に配慮することです。これはつまり、最近の一般的なサービス提供のパラダイムであるSOAP/WS-*やRESTを利用して、XMLをXMLペイロードとして扱えなければならないことを意味します。
上の図はこのアーキテクチャにおける重要な物理コンポーネントと論理プロセスの関係を示しています。アプリケーション・コンテナはクライアント・サイドのアプリケーションが稼働するプラットフォームに対する一般的な呼称です。これは決してサーバ・サイドのコンポーネントではないというのが重要です。アプリケーションとはこのプラットフォーム上で稼動するコードのことを指します。アプリケーションはアプリケーション・コンテナの一部ではありません。
他の場所から提供され稼動前のある時点でアプリケーション・プラットフォームにロードされるのです。ダウンロード・サーバというのは実行前にローカル環境にインストールするためのアプリケーションをクライアント・プラットフォームに配信するコンポーネントを指す用語です。サービス・インタフェースはサービス層の標準的なインタフェースです。サービス層はプレゼンテーション層とビジネス・ロジック層でXMLベースのドキュメントを交換する一般的な仕組みを提供します。
クライアント側で行われる基本的な処理が三つあります。アプリケーション・ダウンロードとは起動前にアプリケーションをアプリケーション・コンテナ上に取得する処理のことです。普通、この処理は一回のみになりますが、実行時にこの処理を行うこともできます。必要に応じてダウンロード・サーバから表示画面をロードするのです。しかし、この後半の方法で設計されたアプリケーションは画面表示フローの制御をサーバー・サイドのwebフレーム・ワークで行うという伝統的なwebアプリケーションのようには振舞いません。画面やページをロードしたクライアント・アプケーションが引き続きフローも制御することになります。プレゼンテーション・フローはどの画面(もしくはチャンネル固有の生成物)がユーザに対して表示されるかというロジックを表しています。データ交換は(Schema定義に準拠したXML文書)データをプレゼンテーション層とサービス層の間で交換する
このモデルの背後にあるメイン・テーマは直行する関心事の分離です。このことは過去常にに求められてきましたが、クライアント・プラットフォームの制限のせいでこれまで一度もなし得ませんでした。ところがやっとアプリケーションは本来あるべき姿で実装できる状況に変わったのです。ビジネス・ロジックが取り去られることによりプレゼンテーション層はより小さくなり、凝集度が高まり、分かりやすくそして保守性が高まるのです。同じようにプレゼンテーション・ロジックが除かれることでサーバ・サイドにも利点があります。
.Ajaxフレームワーク(Dojo、 jQuery、 Ext、 など)、GWT、TIBCO GI、XForms、Mozilla XUL、Microsoft Silverlight/XAML、Java WebStart、JavaFX Script、Adobe Flex、OpenLaszlo、など。
このモデルの成果は、もはや古く頑なに守られている妥協の産物を作ることはないということについて特に新しいことを紹介してはいません。どのようにして新しい技術によってアプリケーションが本来あるべき姿で構築できるようになるのかということを示そうとしました。これは遂に到達したパラダイムなのです。
原文はこちらです:http://www.infoq.com/jp/articles/rationalizing-presentation-tier
Googleのクラウド環境をつかったGoogle App Engineによる開発するにあたり、初めての試みで苦悩する開発者達の経験をもとに、各開発フェーズにあわせて問題点やどう解決したかをご紹介します
去る1月12日、定理証明支援系ツールCoqの初心者向けチュートリアルが開催さ れた(http://kokucheese.com/event/index/23667/)。今後も2月2日 (http://kokucheese.com/event/index/23744/)、2月9日、2月16日と引き続き開 催されていく予定である。本記事では、開催の様子をレポートする。
Neal Gafter氏はOracleによるJava買収の影響に関する議論、Javaにセグメンテッドスタックやメタオブジェクトプロトコルを追加することについての主張、そしてJavaとC#との比較について話をしてくれた。
GoogleはVMをともなう新しい言語であり、JSコンパイラでもあるDartをプレビューした。 InfoQはDartのアプリの構築に貢献する文法の裏側を探った:スナップショット、Isolate、モジュール方式
本記事ではCSPベースの「マルチドメイン・モデル検査ツール」である、PAT(Process Analysis Toolkit)について紹介する。モデル検査は、形式手法(Formal Method)という方法論を基礎とする技術であり、複雑さが増大しながらも安全性を求められる、現在のソフトウェア開発の状況に対する処方箋の1つとして注目されている手法である。
前回まで、Jenkinsの幾つかの側面に注目して解説をしてきました。シリーズ最後の今回は、Jenkinsをサービスとして使う方法を紹介します。
Alloyは、MITにて開発された仕様記述言語であり、ツールによる自動解析を使い、インクリメンタルに形式仕様が書けることが特長である。筆者らはAlloy開発者による、Alloyを使った形式手法入門書を翻訳、今夏にオーム社より刊行した。本記事では、Alloyの簡単な概要と、翻訳書『抽象によるソフトウェア設計』(「Alloy本」)を紹介する。
スマートフォンを中心としたマルチデバイスにおけるタッチユーザーインターフェイスへの対応は、既に必須の項目となりつつある。本記事では、Windows デバイスにおける UX のベースとなっている「メトロ」というデザイン言語を掘り下げながら、既存環境を意識しつつもどのようにタッチユーザーインターフェイス開発に取り組んでいくべきであるかについて解説していく。
No comments
スレッド表示 返信