クライアント側で処理するビューロジック
Ricoを調査しているときに、2つの実現タイプが提供されていて、それぞれいいトコと悪いトコがあると思った。
- サーバーからHTMLの断片(を包んだXML)を貰って innerHTMLを置き換えるパターン
- サーバーからXMLを貰って javascript側でデータをビューに変換/マッチングするパターン
- JSON-RPCなんかも似たようなもんかと(乱暴)
後者は一見スマートだし、Google AJAXSLTなんかも基本的には後者の流れを汲むものだという気がするのだけど、これってビューの中にビューを生成するためのロジックを搭載したままクライアントに送り返すわけで、実は気色悪いような気がしている。
いわゆるMVCモデルの話とは別に、"ビューはサーバで生成してクライアントが閲覧するだけ"ということに慣れているのかもしれない。実際にはクライアント側のコンテキストでビューが生成されてもMVCモデルが崩れる、というわけではないだろうから。
そんなわけで私は直感的には前者の方式が好き。サーバから返答するのはHTMLの断片であり、それを愚直にinnerHTML置き換える、というもの。この方式は後者と比べて以下の利点がある。
- UIモックからの開発のワークフローが簡潔ではないか
- デザイナーとの協業がラクなのではないか
- XMLを受け取ってクライアント側javascriptで「見える」ようにするロジックはデザイナーにはメンテ不可能
- XSLTでも同様
- HTMLならメンテができる
- 動的変更部分だけで Action,jsp/html/velocityなどが完結していればデザイナーは当該部分の見え方だけを変更できる
以下のことについてはイマイチっぽい
- サーバ側で Ajax以外のクライアントからのコールも許容する場合、むしろ複雑になる
- ロジックの責務が「見えるビューを返却する」ことに変化しているため
- たとえば「最新の天気を返す」というケースを例に取れば、WebServiceのようにサービスを公開するのと、HTMLビューを返すポイントを公開することでは処理が同じなのに責務が異なる
- 2つ用意したらどうかな...?
以下のことについては差がないか
うーむ。RPCとかWebServiceがらみの話を含めると、よくわからなくなるのだけど、やっぱりAjaxでコールするサーバロジックからはXHTMLビューを返すのがいい気がする。