ひがやすを技術ブログ

電通国際情報サービスのプログラマ

なぜSuper Agileなのか

この前のJavaナイトセミナーでSeasar2がなぜSuper Agileなのかをしゃべりました。その資料が公開されています。
http://www.iajapan.org/bukai/java/event/2007/0124/JNS_02.pdf
資料だけだと十分に伝わらないと思いますが、興味のある方はご覧ください。強い型付けの言語が好きなんだけど、最近のJavaってLLにめちゃめちゃ遅れをとっているよねー、Javaってだめなのかなーって思っている人向けです(笑)。
何人かの方に感想を書いていただきました。ありがとうございます。m(_ _)m
http://d.hatena.ne.jp/torutk/20070124#p1
http://d.hatena.ne.jp/papanda0806/20070127/1169910702
http://www.javainthebox.net/blog/2007/01/java-night-seminar.html
http://yoshiori.org/blog/2007/01/post_188.php

IEでは、tbodyのinnerHTMLを更新できない

次のようなHTMLはFirefoxではうまくいきますが、IEでは失敗します。

<html>
<body>
<table>
<tbody>
<tr><td>111</td><td>222</td></tr>
</tbody>
<tbody id="otherRows"></tbody>
</table>
<script>
var e = document.getElementById("otherRows");
e.innerHTML = "<tr><td>333</td><td>444</td></tr>";
</script>
</body>
</html>

IEはtbodyが更新できないんだよなー。残念。本当は、TeedaのGridで50件以上の場合、50件以上の部分のHTMLをサーバに文字列として置いておいて、Ajaxで非同期にとってきてtableに足そうと思ったんだけど。

Teedaを使ったときのアーキテクチャ(クラス・パッケージ構成)

Teedaを使ったときのアーキテクチャは、Super Agileの時とEasy Enterpriseの時で違います。今回は、Super Agileのケースを書いてみます。サブアプリケーションの下に存在するクラスとルートパッケージの下に存在するクラスがありますが、使い分けは次の通りです。

  • サブアプリケーション配下(xxx.web.yyyなど。yyyはユースケースを表す。)
  • ルートパッケージのサブパッケージ配下(xxx.daoなど)

ユースケース固有のクラスは近くにまとまっていたほうが良く、ユースケースを横断するクラスは機能ごとにまとまっていたほうが良いという考えです。そうするとパッケージ構成は次のようになります。

  • xxx.web.サブアプリケーション
  • xxx.entity
    • テーブルに一対一にentityを作成します。
    • Entity名はテーブル名と同じにします。
    • 実際はテーブル名は'_'記法、Entity名はcamel記法にします。例えば、テーブルがAAA_BBBならエンティティはAaaBbbになります。カラム名とプロパティ名の関係も同様。
  • xxx.dao
    • Entityに一対一にDaoを作成します。
    • Dao名はエンティティ名+Daoになります。
  • xxx.logic
    • 複数のユースケースで共通に用いられるロジックを記述します。
    • ロジック用のインターフェース、メソッドは次のようにして見つけます。
      • アクティビティ分析をします。
      • 個々のアクティビティを「xxxをyyyする」という形で記述します。
      • xxxがロジック用のインターフェース名になり、yyyがメソッド名になります。
    • Logicで扱われるデータは、DTOではなくEntityです。
    • 一般的にはLogicにDaoがDIされるでしょう。
  • xxx.dto
  • xxx.helper
    • ユーティリティ用のクラスですが、パラメータ的な設定項目があったり、他のクラスをDIする必要があるもの。
  • xxx.util
    • staticなメソッドで実現できるユーティリティクラス。

クラス名、メソッド名、パッケージ構成のルールも決まっているので、誰でも簡単にできるはず。