Reflexフレームワークの真骨頂はViewである。Reflexは、ブラウザ、携帯、Flex2、PDFなど様々なViewに対して、同じEntityを与えさえすれば、同じように表示させることを目標とする。以前にも述べたが、1つのEntityから複数の写像をとれるという意味で、名前をReflex(写像)とした。これをワンソース・マルチビューというらしい。(xfy by ジャストシステムさん)
本来は、EntityをマッシュアップするControlerがViewからの参照元なので、ControlerはViewを元に設計すればよいことになる。さらには、EntityもViewを意識することで、Viewのイメージを崩すことなく一貫して扱えるようになるので、このような設計を心がけるべきだろう。実際に私たちがプロジェクトで構築したシステムにおいては、理想とはいえないものの、一貫したEntityの利用が一応できている。例えば、Flex2のカートから受注プロバイダにXML送信された受注(Entity)は、管理画面のPHPからJSONリクエストで呼ばれることもあれば、納品書PDFとして出力されることもある。否定の3.を参照。
3.各サブシステムで共通のエンティティを使用(最小単位は1品1葉1レコード)
それでも理想といえないのは、統一したレンダリング方法がないからである。一つのテンプレートを作成するだけで、Flex2やPDFなどの様々な表現に対応させたかったのだが、そこまではできておらず、それぞれのViewに応じた実装とスキルが必要であった。
そこで、現在開発中のReflex Template(コードネームv:lex)では、XHTMLによるテンプレートを一つ作成するだけで様々な表現ができるようにした。考え方としては、下図のように、EXCELのようなスプレッドシートのイメージでViewを設計し、1枚のシートをdocument、ページをpage/tab、表をtableとして配置していく。tableはページに何個でも置くことができ、位置も細かく指定できる。なお、表題などの文章や画像などは1マスの表とする。
Templateは動的に選択でき自由に画面遷移できる。また、TABを利用することで、遷移なし(ページ読込なし)に異なる画面を表示させることができる。セッションという考えはなく、Entityにデータを保存する。つまり、Entityはグローバルであり共有データとしても使う。Entityを与えてBlogicを実行するが、BlogicはクライアントJavaScriptでも、サーバのサービスでもどちらにあってもよい。
また、以下のような5階層のレイヤーをもち、Template Engineによって各層が組み立てられる。
<Template Engineの機能>
1.Templateを選択する機能
- page id(xxxx.html#001)で指定
2.サーバからEntityを取得しBlogicを実行する
- Entityをチェックしてエラーコードをセットする。その後はAttributeによってエラーが表示される
- エラーがなければBlogicを実行する
3.静的なtemplateの上に動的なEntityをマッピングする。その際、Attributeにより値をフォーマットする(カンマを付けたり色を付けるなど)
4.データ入力時にvalidatorを実行する
5.(エラーが含まれていなければ)Entityをサーバに送信する
一つだけ注意すべきことがある。それは、Entityへのデータ入力点(この場合、サーバから取得した時点とキー入力の時点)におけるエラーチェックを厳密にすることだ。キー入力の時点では、Validatorとして古くからJavaScriptは一般的に使用されてきたが、サーバから読込んだ時点というのは意外な方も多いだろう。この設計では、ここをチェックしないとハングする場合もあるので要注意だ。というわけで、否定の16はやはり間違いであった。
16.入力は寛大に受け付け、出力は厳しくせよ
なお、Blogicにおいてエラーとなった場合には、エラーコードをスタックして返すようにする。エラーコードの種類により、Alertを出したり、色を変えたりするのはValidatorではなく、Attributeの責務である。
詳細は完成してから発表したい。乞うご期待。
0 件のコメント:
コメントを投稿