どうもです。
コメントありがとうございます。→ hei,Izu-ru さん、まさよしさん tom さん。
tom さん> generic+aspect+α で・・・
確かに、Aspect 指向フレームワークでは、コンパイルなり実行時に、コードを混ぜていますよね(ウィービングって言うんでしたっけ?)。似たような仕組みをモデルの変更分のコードの反映に使えそうですが、さて Join Point はどこだって話しになりそうな。・・・その辺がαですか。
Web システムの構築をやっている人なら、大抵の人はデザインとロジックの分離という言葉を聞いた事があると思います。要はシステムのプレゼンテーション層、ユーザーインターフェイスを構築する上で、入出力に対するシステムの反応ロジックとユーザーインターフェイスの(見た目の)デザインを分けて管理しましょうと言う話です。Web でないシステムの場合は、U I/F のデザインもプログラム中に埋没してしまう事が多かったと思いますが、Web の場合は HTML と言うブラウザ上での画面のデザインを定義する標準化された言語があるので、それを積極的に生かして、プログラムと画面のデザイン定義は分けて行こうという話です。
個人的には、アスペクト指向に一番近いのは、3)だと思います。1)や2)では Web デザイナとプログラマの協業が難しいと思います。画面のデザイン仕様の変更に対して、デザインとロジックが上手く分離していないので、Java プログラムになるか、拡張 HTML ファイルになるかは別ですが、それぞれのファイルの修正は煩雑になります。それは、プログラムロジックと画面デザインと言う関心事(コンサーン)が明らかに違うからでしょう。(XML によるドキュメントモデルと Java のクラスベースのオブジェクト指向モデルの違いと面もある。)文字通り、どちらが支配的になるかは別にして。副次的な物が横断的に存在しているのは事実だと思います。
私自身、最初は JSP ちっくな HTML の中に Java のプログラムを埋め込む形式で、Web アプリの開発を進めていましたが、画面数も多かった事があり、保守や次のバージョンの開発で、散々な目に会ったので、3)の XMLC を利用するようになりました。
XMLC は
*画面仕様を記述したHTML ファイルから XMLC コンパイラを使って、機械的に DOM (Document Object Model) インターフェイスを使ったアクセスインターフェイスとその実装クラスを生成します。
*また HTML ファイルの中の id 属性と SPAN タグを利用して、HTML ファイルのうち、仕様上、動的に変更する部分に対する簡易アクセス用メソッドを提供します。
*Servlet からはアクセス用インターフェイスに対する DOM プロ
グラミングで特定のHTML ページの文書構造をロジックに応じて変更させる事で動的なページ生成を行います。
結局、HTML ファイルに独自の拡張をする事もなく、プログラムとの連携も id 属性と SPAN タグという HTML の標準仕様内で工夫すれば済む話と言う事(この程度なら CSS も使える Web デザイナーなら楽なものです。)で、上手くロジックとデザインを分離できていると思います。実際に保守性は随分向上しました。CSS の積極的な利用も併用すると、デザインの変更に伴うプログラムの変更は劇的に減りましたし、同じように Web デザイナーとプログラマ間のいざこざもかなり減りました。(PageMixer については XMLC が DOM を使っているところが処理効率などを考慮して SAX っぽい物に変っていると言う事です。詳しくは http://pagemixer.sourceforge.net/index.ja.html を参照してください。)
結局、アスペクトと言う観点で見ると、
+XMLC コンパイラで HTML ファイルを機械的に Java のモジュールに変換できる事(AOP で言う所の ウィービングですか)
+DOM という標準的なインターフェイスを使っている事。(プログラマに HTML への汎用的で明確なアクセスの手順を定義している。)
事が重要だと言う気がします。
あと、話をモデル駆動(MDA) に戻しますと、素朴な疑問ですが、くだんの MDA における DSL(Domein Specific Language)ですが、 HTML もそれに該当するのでしょうか。同じ Language だし。ただ、駆動の基盤となるモデルにしては少し静的、構造的過ぎるような気もするし、けれど見た目上は JSP も HTML を土台にしている事はしているんだよな。・・・・、ちょっと違うか。
なるほど、考えてみるとこれは実感ですね。確かに HTML の内容を動的に変える場合に、簡単な仕様なら XMLC コンパイラが自動生成するアクセスメソッドで要は足るのですが、ユーザーの権限レベルやDBからの取得データの件数や属性によって、動的にレイアウト・画面構成をカスタマイズする場合には、とたんにDOM プログラムだと煩雑になりました。
まさよしさん>いまの開発環境はこの部分をデザイン時にべたにやる方法のため、かなり暗黙的です。
そうですね。最初の頃は漠然と「この辺もっと楽にならんかな・・・」と思いましたが、よく考えてみるなら実際の画面レイアウトとタグの木構造を表す、HTML の DOM の間にも意味的なギャップがある訳ですから、やはり DOM 木への操作が画面のレイアウトの変化として、どう表れるかを、暗黙のうちに頭で考えながらプログラムをしていたから煩雑だったんでしょうね。(だからこそ、Web デザイナーは HTML ファイルをなるべく直接さわらずに DreamWeaver 等の編集ツールを使うわけです。)
そういう時に、DOM の操作と言ったより基本的な手順を煩雑なぐらいに自分で組むのではなく、何がしか画面のレイアウト定義に特化したパラメトリックなスクリプトで動的な画面生成ロジックを組み、それを XMLC のオプションファイルとして使って、Java と HTML をつなげれたらなと思ったものです。(多分にコンパイル時に何がしかのツールでそのスクリプトを機械的に DOM ベースの Java プログラムに落とす事になるんでしょう。)