勉強日記

チラ裏

PoEAA Ch4 Web Presentation

martinfowler.com


Web Presentation

  • 執筆時点で数年間におけるEnterprise Applicationsの最大の変化
  • WebブラウザUIの登場
  • つよみ
    • クライアントアプリケーションのインストール不要
    • 共通のUIアプローチ
    • ユニバーサルアクセス
  • Webアプリケーションをつくるのは、サーバソフトウェアからはじまる
    • どのURLをどのプログラムで処理するかの設定ファイル
      • 【補】Laravelでいうとroute/web.phpとかのきもち
    • Webサーバの仕事
      • リクエストのURLを解釈
      • Webサーバプログラムに処理を移す
  • 大きく2つの形
  • スクリプト
    • HTTP callを処理する関数やメソッドからなるプログラム
    • HTTPリクエスト(文字列)からデータを取得
    • HTTPレスポンスを出力
      • テキストストリーム操作
      • ストリームコマンドでレスポンスを作るのはしんどい
        • プログラマでもしんどい
        • HTMLマークアッパーなどにはほぼむり
  • サーバページ型
    • レスポンスをHTMLベースでかく
    • コード片をいれておき、動的に変化させる
    • 入力(=リクエスト)ベースで変化させる場合は骨が折れる
  • 両方つかおう
  • これがMVC: Model View Controllerというやつ
    • リクエストの解釈: Controller
    • レスポンスの整形: View
    • ロジック: Model
  • MVCに関する誤解の話
    • Controllerという言葉の誤解
    • MVCのCを言うときには、著者はInput Controllerという言葉を好む
      • リクエストを解釈する人
  • 制御のながれ
    1. Controllerはリクエストから情報を抽出する
    2. 情報と制御をModelに渡し、ドメインロジックを処理する
      • 永続データにアクセスしたりなんやかんやする
    3. Controllerに制御戻す
    4. Controllerは適切なViewえらぶ
      • 【補】データがなかったら404ページ、とかもありうるわね
    5. 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
    • いわゆるテンプレート
    • 動的なコンテンツのプレースホルダを仕込む
    • 多くのプラットフォームはこれ
    • Viewの中でプログラム書ける
      • 柔軟
      • ハチャメチャ・保守困難になりやすい
      • ドメインロジックが混入しないよう、きびしく自律する必要あり
        • ヘルパオブジェクトに処理を委譲する等
  • Transform View
    • XSLTが代表格
      • XSL Transformation

        W3Cにより標準化されたXML文書の変換用言語である。 (wikipedia)

      • ドメインデータがXMLだったり、容易にXMLに変換できたりする場合は良い
    • ControllerはXSLTスタイルシートを選び、Modelから収集されたXMLデータに適用して所望のレスポンスを得る
  • 混ぜることも出来る
  • single stage/Two Step Viewの選択
  • Two Step View
  • 使いどころ
  • 使えないところ
    • 1st stageで生成する論理ビューが共通化できないケース
      • UIが全然違うビュー
        • PCとモバイルとか

Input Controller Pattenrs

  • 2つある
    • Page Controller
      • モデルに処理を移してビューを生成する人
      • ビューの選択の責務
    • Front Controller
      • すべてのHTTPリクエストの処理専任
        • Laravelのmiddleware的な