Velocity

Velocityについて

コミュニティ

ドキュメント

比較

ツール

日本語訳について

事例研究: JSP vs. Velocity
私は、Velocity で私の発見したことを共有したいと思います。
私は、我々のアプリケーション・サーバーで、埋め込みメールの
テンプレート処理をするシステムで Velocity を使用しています。

私がこのサブプロジェクトを開始したとき、私は我々の
アプリケーション・サーバーでは、テンプレート出力の生成に
言語として JSP を使っていました。
それは、恐ろしいものでした。
私がソケット上ではなくて直接のメソッド呼び出しを通して通信
することができたアプリ・サーバーにおいて、servlet エンジンを
はめ込むことの難しさは言うまでもなく、多くの問題が、ありました。
VTL テンプレート対 JSP テンプレートは、Velocity 議論に特有です。
私の JSP テンプレートを見てください。
パッケージ名は、害が無いように変更しています。
例は、ここにあります:


----------------8<---------------

<%@ page session="false"
        import="java.util.*,
        foo.events.*,
        foo.emeeting.*,
        foo.validation.*,
        foo.util.actionevent.ActionEvent,
        java.util.Date"%>

<jsp:useBean id="meeting" scope="request" type="foo.IMeeting"
class="foo.Meeting"/>

<html>

<!-- etc -->

<table width="600" border="0" cellspacing="0" cellpadding="4" 
    bgcolor="white">
<tr>
<td>
<%
Iterator            events = meeting.getStoredEventsIterator();
int                 repId = 0;

%>
<i><b>Topic: <%= meeting.getTopic()%></b></i>
<p>
<%
while (events.hasNext()) {
  Object event = events.next();
  Participation yapper =
meeting.getParticipation(((MeetingEvent)event).getFromId());
  if(event instanceof ChatEvent) {
    if("R".equals(yapper.getRole()) ) {
%>
<font color="#000000"><b><%=yapper.getName()%>:</b></font>
<%
      repId = yapper.getParticipantId();
    } else {
%>
<font color="#0000f0"><b><%=yapper.getName()%>:</b></font>
<%
    }
    ChatEvent ce = (ChatEvent) event;
%>
<br>
<%
  } else if(event instanceof URLPushedEvent) {
    if("R".equals(yapper.getRole()) ) {
%>
<font color="#000000"><b><%=yapper.getName()%>:</b></font>
<%
    } else {
%>
<font color="#0000f0"><b><%=yapper.getName()%>:</b></font>
<%
    }
    URLPushedEvent pe = (URLPushedEvent) event;
%>
<a href="<%=pe.getStoredData()%>">"<%=pe.getStoredData()%>"</a> <br>
<%
  }
}
%>
<hr>
<br><%=meeting.getMeetingId()%>:<%=repId%><br>
</td>
</tr>
</table>
</div>
</body>
</html>

----------------8<---------------

気持ち悪くなりました?
さて、上記と同じものを達成している Velocity テンプレートは、
こうなりました:

----------------8<---------------

<html>

<!-- etc -->

<table width="600" border="0" cellspacing="0" cellpadding="4" 
    bgcolor="white">
<tr>
<td>
<i><b>Topic: $meeting.getTopic()</b></i><p>

#foreach( $event in $meeting.getStoredEventsIterator() )
  #set( $yapper = $meeting.getParticipation($event.getFromId()) )
  #if( $event.getClass().getName().equals($urlEvent) )
    #if( $repRole.equals($yapper.getRole()) )
      #set( $repId = $yapper.getParticipantId() )
      <font color="$blk"><b>$yapper.getName()</b></font>
    #else
      <font color="$blu"><b>$yapper.getName()</b></font>
    #end
    <a href="$event.getStoredData()">$event.getStoredData()</a> <br>
  #elseif( $event.getClass().getName().equals($chatEvent) )
    #if($repRole.equals($yapper.getRole()) )
      #set( $repId = $yapper.getParticipantId() )
      <font color="$blk"><b>$yapper.getName()</b></font>
    #else
      <font color="$blu"><b>$yapper.getName()</b></font>
    #end
    $event.getStoredData() <br>
  #end
#end
<hr>
<br>$meeting.getMeetingId():$repId<br>
</td>
</tr>
</table>
</div>
</body>
</html>

----------------8<---------------

私はその後マクロへのそのやや大きい foreach ループを定義して、
より短縮させることができました、Velocity の #macro 機能を使い、
このようにします。

#drawStandardHtmlTranscript ( $meeting )

2 行追加するだけで (1行は、#parse でもう一行は #drawStandardHtmlTranscript です)
コードを 20 行もテンプレートから削除できました。

コンテキストをプールすると、(私はそうしないと 2 倍になりますが)
Velocity の実行時の呼び出しでは、最終的にテンプレートのマージ
のために消費されるのは、20 〜 50 ミリ秒です。
また、これは素晴らしいパフォーマンスです!


最後だけれどもおろそかにできないのは、テンプレートを書くために
Webデザイン・チームに対する教育は、本当に開始から終わりまで10分
でした。彼らは、私に一度も質問をしませんでした。

-- 
Nick Bauman
Software Engineer
3600 Dupont
Minneapolis, MN
55412
Mobile Phone: (612) 810-7406
Home Phone: (612) 522-0165



このドキュメントは、 熊坂祐二 が訳しました。
コメントがある場合は、 jajakarta-report@jajakarta.good-day.net までお願いします。
オリジナル英文 Copyright © 1999-2001, Apache Software Foundation