WebMVCにおいては、View=Presentation+Seriarizationではないかという話

この辺の話をしててちょっとインスピレーションが湧いたんだが、
GUIMVCではなく、いわゆるWebMVCにおいては、
View=Presentation+Serialization
なのではないだろうか?


Presentationは何かっていうと人間が見る用で、
Serializationは何らかのプログラムでデータを使うので受け渡す用だと思う。
JSONとかXMLを返すAPIを作ったら、それを受けた側のプログラムでデシリアライズして、
何か処理したりするよね。そういうの。


で、なんで、Presentation or Serializationじゃないのかっていうと、
form生成ってSerializationの要素をかなり強く持ってるんじゃないかって思ったのだ。
極端な例を挙げると、modelからhiddenフィールドのみのformを生成して、
そのformをsubmitしたのを受け取ってmodelが再構築出来るなら、
それはシリアライズとデシリアライズとして成り立っていると思う。
普通のWebアプリの場合も一部もしくは全部が、
ユーザの操作でvalueを変更できる要素になっているだけで、
本質的には変わりないと思う。


Webフレームワークについて考えると、
ViewがPresentationとSerializationという二つの役目を持っていることに
自覚的なフレームワークの方が使いやすいのではないかと思う。
つまり、formの生成について、その他の表示用のものと同レベルで
タグを出力しますというだけだと不便なんだと思う。


逆に、formの生成でも別の形でもmodelのシリアライズという観点で
サポートしてくれるような機能や仕組みがあり、
modelに至るまでの何処かにクエリパラメータからmodelをデシリアライズする
機能や仕組みがあると便利なんだと思う。


Railsでform_tagではなくform_forを使ったほうがいいのはそういう事だし、
accepts_nested_attributes_forとf.fields_for使えば、
1個のmodelじゃなくてそれにぶら下がる複数のmodelごと
formにシリアライズし、変更後の値をmodelにデシリアライズできるすごくいい例だと思う。
やりかたはだいぶ違うけど、ASP.NET WebFormのViewStateなんかもいい例かな。


未知のWebフレームワークを使うときはこの観点で、
機能を見てみると幸せになれるんじゃないかなー、と思った。