Smalltalkウェブ・アプリケーション・フレームワークSeasideとZincを比較してZincを採用する方向で
『UIコンポーネント単位のエンド・ツー・エンドの開発パイプライン』に書いた通り、 Seaside の「コンポーネント指向」のアーキテクチャは素晴らしいと思う。
しかし、 Seaside にはいくつかの問題がある:
- もう一つの大きな特徴である「継続」は不要。いまなら Ajax でやる。
- 「継続」は「モードレス UI デザイン」にも逆行している(※参考『ユーザー・インターフェイスの進化の本質 - Zerobase Journal』)。画面遷移を固定化して「モーダルな UI 」をつくりだす機能なので。典型的にはウィザード型の画面遷移。
HTML5 対応が不安。
WAComponent
のサブクラスでupdateRoot: anHtmlRoot super updateRoot: anHtmlRoot. anHtmlRoot beHtml5.
と書いても、 DTD が
<!DOCTYPE html>
になるだけ。 <html xlsns=~~~ という XHTML の記述が残ってるくらいなので、あまり HTML5 対応は進んでいないと思った。- フレームワークが巨大すぎて、ちょっとしたことをやるときに調べ回らないといけない。 Seaside 自体の把握・改修・拡張が難しい。
- その他、 Wikipedia にも「継続はメモリを食い過ぎる」「 REST 原則に反している」といった批判がある。
- まあ後者はべつにいいんだけど。適材適所なので。詳しくは『Service-Oriented Architecture (SOA) と Resource-Oriented Architecture (ROA) について』で。
こういう問題があって、ぼくがやりたい「UIコンポーネント単位のエンド・ツー・エンドの開発パイプライン」で使うのには無理がありそうだ。
そこで注目しているのが Zinc という HTTP コンポーネント。第一印象は Ruby で言えば WEBrick のような簡易 HTTP サーバー。しかし、 Ruby でいう Sinatra 的な軽量フレームワークにもなっている。
more on this topic: Zinc HTTP Components (Pharo Conference Paper)
Zinc は HTTP のクライアントにもなる。 Zinc + Soup(HTML パーサー)でHTTP I/F のテストを書きたい。 Selenium WebDriver で網羅的にテストすると、テスト実行のコストが大きい。それは要点だけに止めて、網羅性は Zinc + Soup のテストで担保したい。
more on this topic: Smallthoughts Seaside - Automated testing 2
Seaside は一通り(さわりだけでも)理解したので、その設計思想に学びつつ、軽量なZincの上に色々なものを重ねていきたい。
とはいえ、 Seaside との出会いには感謝。おかげで開眼した。
今度は Zinc + GemStone/S というアーキテクチャを検討していく。 Zinc の上に独自のフレームワーク層をかぶせていく構想で。
P.S. 今日は第3回Smalltalkハッカソンに参加させて頂きました。主催の @umejava さんに感謝。