Web Presentation
- 執筆時点で数年間におけるEnterprise Applicationsの最大の変化
- WebブラウザUIの登場
-
つよみ
- クライアントアプリケーションのインストール不要
- 共通のUIアプローチ
- ユニバーサルアクセス
-
Webアプリケーションをつくるのは、サーバソフトウェアからはじまる
-
どのURLをどのプログラムで処理するかの設定ファイル
- 【補】Laravelでいうとroute/web.phpとかのきもち
-
Webサーバの仕事
- リクエストのURLを解釈
- Webサーバプログラムに処理を移す
-
-
大きく2つの形
- スクリプト型
- サーバーページ型
-
スクリプト型
- HTTP callを処理する関数やメソッドからなるプログラム
-
例
- CGI
- Java Servlets
-
HTTPリクエスト(文字列)からデータを取得
-
正規表現
- Perl for CGIの隆盛
-
キーワードインターフェース
- Java servletsとか
- 正規表現よりごちゃごちゃしない
-
-
HTTPレスポンスを出力
- テキストストリーム操作
-
ストリームコマンドでレスポンスを作るのはしんどい
- プログラマでもしんどい
- HTMLマークアッパーなどにはほぼむり
-
サーバページ型
- レスポンスをHTMLベースでかく
- コード片をいれておき、動的に変化させる
-
例
- PHP
- ASP
- JSP
- 入力(=リクエスト)ベースで変化させる場合は骨が折れる
-
両方つかおう
- リクエストの解釈はスクリプト型で
- レスポンスの整形はサーバページ型で
-
これがMVC: Model View Controllerというやつ
- リクエストの解釈: Controller
- レスポンスの整形: View
- ロジック: Model
-
MVCに関する誤解の話
- Controllerという言葉の誤解
-
MVCのCを言うときには、著者はInput Controllerという言葉を好む
- リクエストを解釈する人
-
制御のながれ
- Controllerはリクエストから情報を抽出する
-
情報と制御をModelに渡し、ドメインロジックを処理する
- 永続データにアクセスしたりなんやかんやする
- Controllerに制御戻す
-
Controllerは適切なViewえらぶ
- 【補】データがなかったら404ページ、とかもありうるわね
-
Controllerは、Modelで処理済のデータをViewにわたす
- 直接のメソッドコールで渡さないこともしばしば
- sessionに持つなど
-
重要なこと: Modelが見た目(Presentation)から完全に分離していること
- 【補】ようするにSmart UI antipatternにするなってこと
- 見た目の変更や追加が容易
-
ドメインロジックの処理をTransaction ScriptやDomain Modelに分離
- テストしやすい
-
Application Controller
- Controllerという言葉のまぎらわしさよ
-
MVCのCの責務
- リクエストの解釈
- 制御を移すModel(ドメインロジック)の選択
- Viewの選択
- 上記から「〜の選択」を切り出したもの
InputController
->ApplicationController
->Model/View
- ウィザードなど、特定の条件下・特定の順番でViewを出し分けるような場合に有効
- すべてのWebアプリケーションで必要なわけではない
View Patterns
-
考慮すべき3つの型
- Transform View
- Template View
- Two Step View
- 前者2つが対比、最後のはoption
Transform View | Template View | |
---|---|---|
single stage | ||
Two Step View |
-
Template View
- いわゆるテンプレート
- 動的なコンテンツのプレースホルダを仕込む
-
多くのプラットフォームはこれ
- ASP
- JSP
- PHP
-
Viewの中でプログラム書ける
- 柔軟
- ハチャメチャ・保守困難になりやすい
-
ドメインロジックが混入しないよう、きびしく自律する必要あり
- ヘルパオブジェクトに処理を委譲する等
-
Transform View
-
XSLTが代表格
-
XSL Transformation
W3Cにより標準化されたXML文書の変換用言語である。 (wikipedia)
- ドメインデータがXMLだったり、容易にXMLに変換できたりする場合は良い
-
- ControllerはXSLTスタイルシートを選び、Modelから収集されたXMLデータに適用して所望のレスポンスを得る
-
- 混ぜることも出来る
- single stage/Two Step Viewの選択
-
Two Step View
- 1段目: ドメインデータから論理的なビューを生成する
- 2段目: HTMLをレンダリングする
-
使いどころ
-
各画面で基本的なレイアウトが同じ
- 顧客画面
- 注文画面
-
表示端末ごとにレンダリング変えたい
- Webブラウザ
- 携帯情報端末
-
-
使えないところ
-
1st stageで生成する論理ビューが共通化できないケース
-
UIが全然違うビュー
- PCとモバイルとか
-
-
Input Controller Pattenrs
-
2つある
-
Page Controller
- モデルに処理を移してビューを生成する人
- ビューの選択の責務
-
Front Controller
-
すべてのHTTPリクエストの処理専任
- Laravelのmiddleware的な
-
-