485 :
316:
>>480 >質問その1
>どういうWebサイトを作る時にCocoonはメリットがあるの?
一言で言うと、力技でたくさんコンテンツを作る必要があるサイトだな。
Cocoon2自体は、ローテク同士の接着剤の役目を果たす。Webアプリケーションを
ごりごり作るというよりも、大量のコンテンツが並ぶサイトを構築するための
ものだ。
もちろん、ありがちなショッピングカートみたいなものを作るのも結構
簡単なんだが、それは他のソリューションでも同じように出来る。
Cocoon2が便利なのは、元ネタは殆ど同じなんだが、見せ方やら使い方が
色々で、しかもそれがべらぼうに多くて、という場合に、どんどん楽になる。
XSLTに対してすんなり入れるなら全然OKだろう。XMLのありがたみを最大限に
活かしてくれる枠組みという感じだ。
486 :
316:02/10/22 13:30 ID:???
>質問その2
>Cocoonではどうやってロジックとデザインの分離を実現するの?(一応スレの内容に合った質問として)
まず、Cocoon2の肝はサイトマップという仕組みにある。
サイトマップの中でコンテンツごとにパイプラインというのを定義していく。
サイトマップ自体はXMLファイルだが、これを読み込んで動的に
Servletに変換してくれるというのが秀逸だ。
さて、サイトマップに書くパイプラインの簡単な例は、こんな感じになる。
<map:pipeline>
<map:match pattern="hello">
<map:generate src="hello.xml"/>
<map:transform src="hello.xsl"/>
<map:serialize type="html"/>
</map:match>
</map:pipeline>
これはブラウザからURLに、
http://localhost〜〜〜/helloと指定すると、
まず、hello.xmlというファイルを読み込んで、そこにhello.xslというXSLTを
適用し、最後にHTML形式に変換して返信するという定義だ。
487 :
316:02/10/22 13:33 ID:???
ここで面白いのは、URLは何でもOKだということだ。
実体のファイルとは関係ない。
さて、元ネタが同じで、見た目だけ変更するにはどうするか。
この場合は、もうひとつパイプラインを追加して、適用するXSLTを別個用意すればOKだ。
<map:pipeline>
<map:match pattern="hello2">
<map:generate src="hello.xml"/>
<map:transform src="hello2.xsl"/>
<map:serialize type="html"/>
</map:match>
</map:pipeline>
これはサイトマップファイルに追記するだけで、on the flyでServletに
なる。どうだ、便利だと思わないか(藁
488 :
316:02/10/22 13:37 ID:???
しかし、これでは質問への答えになっていない。ロジックはどうするのか、という
問いだ。ここで考えてみて欲しい。コンテンツを生成するときのロジックとは
元ネタのXMLを動的に生成することだということだ。そこで、Cocoon2では
XSPというものを使う。
<map:pipeline>
<map:match pattern="hellodb">
<map:generate src="hello.xsp" type="serverpages"/>
<map:transform src="hello.xsl"/>
<map:serialize type="html"/>
</map:match>
</map:pipeline>
こういう記述をすれば、XSPを実行できる。実行した結果、XMLがメモリ上に
生成されて、こいつにXSLTが適用されるという按配だ。
489 :
316:02/10/22 13:40 ID:???
勘のいい香具師なら気付いたことだろう。
そう、これは分業が可能だということだ。
ダミーのXMLを用意しておいて、XSLTの作成をする奴と、
そのダミーのXMLどおりのものを生成するXSPを書く奴とで別個に
作業できる。
最後に、サイトマップで合体すればOKという風になる。
しかも、それぞれは普通のエディタだけで作業可能だ。もちろん
XMLエディタや、DreamWeaverのようにXHTMLを書けるツールを使うことで
生産性をUPできる。
490 :
316:02/10/22 13:42 ID:???
XSPのポイントは、決して見た目の中にロジックを埋め込んでいるわけでは
ないということだ。あくまでも、元ネタとなるデータの生成にロジックを
使うわけだ。
それに独自タグは一切不要だ。何故なら、単純なXMLとXSLTをくっつけているだけだからだ。
昼飯を食うので、続きは後ほど書く。
491 :
316:02/10/22 13:53 ID:???
さて、分業という点で言うと、
XSPプログラマ(M)
XHTMLデザイナー(V)
XSLTプログラマ(C)
という分担が可能になる。XSLTはちょうどSQLプログラミングと同じような
感じだから、手続き型言語におけるプログラミングとは、また風情が違う。
XSPのロジックは、Javaで記述する。Servletになるのだから当然だな。
だからJavaで出来ることは何でもOKだ。
492 :
316:02/10/22 13:56 ID:???
同じURLで、複数のUser-Agentごとに見た目を変更するのも簡単だ。
<map:pipeline>
<map:match pattern="hello">
<map:generate src="hello.xml"/>
<map:select type="browser">
<map:when test="imode">
<map:transform src="hello_imode.xsl"/>
</map:when>
<map:otherwise>
<map:transform src="hello.xsl"/>
</map:otherwise>
</map:select>
<map:serialize type="html"/>
</map:match>
</map:pipeline>
このように、ブラウザセレクタを使って、適用するXSLTを変更することが出来る。
だからもう、
http://i.〜〜やら、
http://〜〜/iなどとして、分離する必要はない。
493 :
316:02/10/22 13:58 ID:???
もちろん、DBへのレコードの追加/更新/削除も簡単だし、
セッション管理や認証も簡単に実現できる。
大規模なサイトになれば、グループごとにサイトマップを分割して
マウントという機能で連結させることも可能なので、個別に開発を
進めることもできる。
494 :
316:02/10/22 14:07 ID:???
さて、重要な質問に答えなければならない。
>質問その3
>うちの職場は男しかいないんだけど、Cocoonを使って開発したらカワイイ新人の女の子が入ってくる?
まず、これまでの漏れのカキコを良く読んで欲しい。どうだろうか、女の子に
任せたい部分があるはずだ。そう、HTMLの作成〜XSLTのプログラミングだ。
ここは、見せたい数の分だけ作成する必要がある。もちろん、XSLTもファイルではなく
<map:transform src="
http://〜〜〜/hello_xsl"/>のようにXSLTを生成するServletを
作成して動的に生成させることも可能だが、これにも限度はある。
要するに、C/Sのシステム開発で画面周りをやる人足が一番必要となるように、
Cocoon2をつかった場合でも、画面周りの作成を担当する人間が多く必要となる。
しかし、得てして男のプログラマは、こんなところより、コードをがりがり書くことに
情熱を燃やしているはずだ。そこで、女の子の採用をする余地が生まれる。
幸いなことに、この不況のさなか職にあぶれている婦女子は多い。若い子もいっぱいだ。
そこにWebデザイナー募集初心者歓迎などと出せば、いっぱい集まってくるのは必然だ。
あとは面接して、好みの子を選べば良い。但しルックス偏重で戦力にならん奴を雇っても
それはCocoon2の責任ではないことに注意しなければならないという罠(w
495 :
316:02/10/22 14:11 ID:???
もうひとつ注意点がある。初心者の女性には根気よく接してやることだ。
いきなり難しいテーマを与えて、ほったらかしにしておいて、出来なかったら
怒声を浴びせるなどというデリカシーのない行為は慎みたい。
残念ながらCocoon2はパブリッシングフレームワークではあるが、君の言葉の
パブリッシングまで管理はしてくれないということだ。
Cocoon2はトランザクション系のWebアプリケーションも容易に開発可能だが、
その場合、簡単な画面をたくさん、という女性を必要とする状況にはなり辛い。
特に、コンテンツ数の多い、力作業の多い案件でこそ、女性の必要性をアピール可能だ。
だからこそ、Cocoon2を適用する案件は慎重に選ばねばならないのだ(藁
繭2を使って、DBアクセスする際の記述ってどうなります?
497 :
316:02/10/22 14:13 ID:???
ちなみに、漏れは今Cocoon2でトランザクション系のシステム開発をしている(泣)
まあ、しかし引き続き前回のメンバーでやっているので、チャンスはあるはずだ(w
498 :
316:02/10/22 14:21 ID:???
>>481 自分でソースコードをハックすればいいだけだろ。サポートフィー払って
「仕様です」なんていわれるだけより、よっぽど早いし気が楽だ。
ワケワカらん外注のコード見て、ウンザリしながら書き直すよりよっぽど効率的だ。
俺は今や全部オープンソースで開発してる。金融系のクリティカルな部分だ。
結構実績もあるが、オープンソースだからということが理由でトラブったことは
一度もないぞ。
トラブルは全て自分たちの設計がまずかったり、要件定義がぶれていたり、とか
そういうものだ。そんなものは、自分で直すのが当然だよな。
人数も少なくて済んでいるので、顧客からも予算が押さえられたといって
喜んでもらってる。使う道具がどうだろうと自分の実力が変わるわけじゃないよ。
他人のコードを読む癖がついてない奴は、他人にメンテしてもらえないコードの
書き方しか身に着かないぞ。
それにな、困ったら誰かに助けてもらおうなんて最初から当てこんでるようでは
客にも部下にも上司にも舐められるぞ(w 女にももてないぞ。
心配するな。お前の書くコードよりは、オープンソースのブツのほうがよっぽど
しっかりしている(w そんな心配をするよりも、しっかりとアプリケーションの
設計をすることだ。
499 :
316:02/10/22 14:35 ID:???
>>496 XSPを使う。XSPの中でも特にESQLと呼ばれている機能だ。
次のようなXSPファイルを作成すればよい。
<?xml version="1.0" encoding="Shift_JIS"?>
<xsp:page language="java"
xmlns:xsp="
http://apache.org/xsp"
xmlns:esql="
http://apache.org/cocoon/SQL/v2"
xmlns:xsp-request="
http://apache.org/xsp/request/2.0"
xmlns:xsp-session="
http://apache.org/xsp/session/2.0"
>
<hoge>
<esql:connection>
<esql:pool>接続定義名</esql:pool>
<esql:execute-query>
<esql:query>
select * from テーブル名
</esql:query>
<esql:results>
<esql:row-results>
<esql:get-columns/> <== 全部の列をそのままの列名でタグ化するならこれでよい。
</esql:row-results>
</esql:results>
</esql:execute-query>
</esql:connection>
</hoge>
</xsp:page>