豆の木

面白いメタファーで言いたい事も良く分かり、本音ではかなり同調もしてますが(VSの他にもFrameworkをいじらずにコンパイラをいじるというのも圧力釜っぽい気はする)敢えてずらして反応する。
おしゃれに引き継ぐのは無理そうなので自分なり解釈も混ぜて素直に。
 
MSはその昔、複合ドキュメント(というとMSじゃない方っぽく感じるけれど)の時代から、コンテンツでもアプリケーションでも、とにかくコンポーネントとして再利用しよう、というスタンスです。
複合の時に考えるべきは入れる相手も入れられる側も分からない。
そこをインターフェースより中には入らない事で解決する。
 
これが根底にあるのだと思う。
OLEを作る時にCOMが出来る。
Webという事だと、html文書を作るのにbehaviourが出来てhtcが出来る。
とにかくコンポーネントで再利用だ。
コンポーネントの中は見ない。それがスタイル。ViewLinkはDOM越しでも見えない。
htcの中は良く分からなくても良い。イベントでやりとり。attributeを公開。
その為にはLifeTimeに関する機構をフレームワークが提供する必要がある。ツリー作成途中と出来た後というタイミングが必要だ。OnInit、OnLoad。
その事にあの時代に気付いた。

 

でもIE5.5に対して、世界がNOといった。
VMLもXML HTTP Requestもhtcもとてもよく出来ていたけれど。
でも何故か後から世界はXML HTTP RequestだけはYESと言った。
世界が何を考えているのかは良く分からない。
MSが何を考えているのかは分かりやすい。
 
クライアントサイドの路線は挫折して、その先にあるのがWebControl。
WebControlはWebControlで閉じて、その単位で再利用が出来る。まさにhtcの続き。
普段見られるモデル-View-Controlと分ける方法だと、Viewの部品(View全体でなく)を再利用するのは難しい。
これはRailsでもSpringでもそう。
 
<%= EditableDiv(callbackFunc) %>
 
みたいな事は出来るかもしれない。
でもこれはViewLinkよりも前の解決策。
これはずっと追い求めてきたコンポーネントでは無い。
中は丸見え、意識しないと干渉もする。NamingContainerが無いのだからidも振れない。
子供がもてない。親が子供にlistenerをぶらさげられない。
なんで?中を知らないといけないから。まだ<%= %>の時点では実体が無いから。
DOMすらない。だからgetElementByIdでも取れない。
でもこれらの理屈は全部実装の話だ。コンポーネントを組み立てるなら、中を知っちゃいけないんじゃなかったのか?
DBのkeyと一致させてネストさせない。それは解決策かもしれないけれど、MSのやり方じゃない。

 

WebControlでの再利用に本気、これがASP.NET。
だからこそ、WebControlはViewでは無い。WebControlはコンポーネントとして必要な全てを持てる。
WebControl内での分離の為にはITemplateがある。これがWebControlがViewレイヤーでは無い何よりの証拠。
ViewレイヤーならViewを押し出したら何も残らないじゃないか?
JSFにはITemplateが無い(よね?)のにASP.NETにはある、そこは根底に流れる本気度が違うから(追いついていないだけかもしれないけれど)。
もしMVCの話をするなら、WebControlの内部でモデルとビューとコントロールを分離するのがASP.NET-way。
だからこそ、ASP.NETに関してデザインパターンのコンテキストでプレゼンテーションの話をする時にITemplateが出てこないと、根底にあるコンポーネント化という部分を見ていないようにうつってしまう。
DataBindのタイミングがあるからこそ、コンポーネントは実体になれる。
<%= %>では自己暗示だ。ただのprintfじゃないか。だからJSFはASP.NETには近い。それは認める。
 
現実は混沌としていてどんどん複雑になっていくけれど、最初の所でのコンポーネント化をしっかりと作り、その上で複雑な現実と戦う。
これで行く、という確信を、たぶん持っているのだと思う。
 
だからASP.NETやデザインを語る時には、本当はそういうコンテキストで語るべきだと思う。
J2EEはそういう路線では無い。ページ辺を切り取って再利用がASP.NETスタイル。
Pageを前面に押し出すパターンは、やはり違う。
 
CustomのWebControlが中心でUserControlやPageやDataGridViewなんておまけ。
マスターページなんて忘れてもいい。
WebControlが全て。それがASP.NET。
 
だからデザインは、どうWebControlを作るべきかにフォーカスするべきだと思う。
所がそういう話はどこにも無い。
金脈を示した地図では傘にはならないとは思うけれど、どうせ宇宙からのつばなんて現実までは届かない。
まずはそんな物は(ちょっと気分は悪いかもしれないが)無視して食い扶持の確保だと思うのだ。
 
とここまで見て、ブロックシュミットを必読といい切る相手へリンクを張って書く内容では無いなぁ(>私は未読)
第三者向け、という事で(と逃げる)
カテゴリー: ASP.NET パーマリンク

コメントを残す