ブログの表示モードを変更しました

はてなブックマークとかのエントリー名が
2008-07-06 - 出羽ブログ』のように「日付 + ブログ名」の形式に
なってしまうので、表示モードを「ブログモード」に変更しました。
(【はてな】に問い合わしたところ、この方法で直るらしい。)


でも、表示モードを変更に伴い、以前の表示モードの時に
付いていたスター(エントリーについている☆マーク)が消えちゃいました。
せっかく☆マークを付けてくれた皆さん、ごめんなさいごめんなさい。


今までいただいたスターは、以下のアドレスで確認できました。
http://s.hatena.ne.jp/dewa/report

追記:私しか見れないようです。

S2AbstractServiceを用いたAction-Service-Logicパターン

以前に「1.5階層のAction-Service-Logicパターン」を紹介させて頂きました。今回は、このアーキテクチャにS2AbstractService を導入した場合のアーキテクチャについて検討してみました。

主な変更点として、S2AbstractService を導入する場合は、アクションやロジックから直接JdbcManagerを使うこと得策ではないと考え、データアクセスロジックは全てサービスを経由するようになった点です。

まずは、アーキテクチャを図示したものをご覧ください。細かい解説は別エントリにて書かせて頂きますが、エンティティ単位のサービスを採用しつつも、ユースケース固有のロジックはアクションに記述する方法を提示したいと思います。

アーキテクチャ(レイヤ構成図)

アーキテクチャ(モジュール相関図)

続・S2JDBC の弱点を補完するS2AbstractService

エンティティの結合を検索時に指定することがほとんどなので
findByIdやfindAllなんかは実運用では出番があまりないかもです。


AbstractService に次のようなメソッドを用意すれば、結合も汎用的に扱うことができます。


AbstractService.java

public class AbstractService<ENTITY> extends S2AbstractService<ENTITY> {
    
    public List<ENTITY> findAll(String leftOuterJoin, String orderBy) {
        return select().leftOuterJoin(leftOuterJoin)
                .orderBy(orderBy).getResultList();
    }
    
    public ENTITY findById(Integer id, String leftOuterJoin) {
        return select().leftOuterJoin(leftOuterJoin)
                .id(id).getSingleResult();
    }
}


呼び出し側:

Employee emp = employeeService.findById(3, "department");

List<Employee> empItems = employeeService.findAll("department", "name");


追記:
以下のような書き方もあります。

Employee emp = employeeService.select()
    .leftOuterJoin("department").id(3).getSingleResult();

List<Employee> empItems = employeeService.select()
    .leftOuterJoin("department").orderBy("name").getResultList();


ちなみに、EmployeeServiceの中身は空っぽです。

EmployeeService.java

public class EmployeeService extends AbstractService<Employee> {
}


追記:
selectメソッドは、S2AbstractService にて次のように定義されています。

    public AutoSelect<T> select() {
        return jdbcManager.from(entityClass);
    }

S2JDBC の弱点を補完するS2AbstractService

このエントリーではSeasar 2.4.26 から 導入された S2AbstractService について書かせて頂きます。S2AbstractService を活用することで、タイプセーフを保ちつつも、データアクセスロジック関連のソースコードを大幅に減らす効果が期待できます。

S2JDBC の弱点

続きを読む

Eclipseのショートカットを使いこなそう

今回はEclipseを使いこなすためのテクニックとして、Eclipseのキーボードショートカットの中から覚えておくと便利なものをピックアップして紹介する。

日本におけるEclipseの第一人者である(と僕が勝手に思い込んでいる)竹添さんの新記事。Eclipseを使う人は、この記事で紹介されてあるショートカットはぜひ押さえておきたいところです。


とエラそうな事を言いつつも、『インクリメンタルサーチ(CTRL + J)』は知りませんでした。なるほどぉ、便利ですねぇ〜。あと、なぜか『クイックアクセス(CTRL + 3)』が動かねぇ、と思ったらこの機能はバージョン 3.3から導入された機能のようです。(たまたま私の手元にあったEclipseはバージョン3.2でした。)


ps. 先日リリースされた Eclipse 3.4 はまだ試していない。明日、竹添先生にお会いするので、どんな感じか聞いてみよう。

プログラマの生産性を確実に向上させる方法とは?

話題の「生産性」について、そろそろ一言いっておくか。
プログラマの生産性を確実に向上させる方法とはズバリ以下のとおりです。

デュアルディスプレイ(※)にする


地味ですけど、破壊力ありますよー。


ちなみに、私が所属しているティーアンドエフカンパニーでは、
数年前から、プログラマだけでなく、経理の人とかも含めて全社員が
デュアルディスプレイを採用しています。
理由は、あきらかにパソコン上での作業効率がアップするからです。

実に安い投資なので、やらなきゃ損です。


※ 1台のパソコンから2台のディスプレイに対して表示する機能。

セッションスコープのアクションフォーム内で初期化タイミングの異なるプロパティをどう扱うか?

今回、SAStrutsで用意されるセッションスコープのActionFormの削除手段(@ExecuteアノテーションにremoveActionForm=trueを指定)は、実行メソッドの正常終了時にセッションからそのActionFormを削除するというものなので、検索系の項目だけ初期化、登録系の項目だけ初期化といったことができそうに無いです。


基本は、hiddenを使った状態維持が望ましいと思います。


それでも、セッションスコープのアクションフォームを使う場合は、
初期化(リセット)タイミングの異なるプロパティをどう扱うか?
という問題に対処する必要があります。


これについては、SAStruts 1.0.3-rc1より

    @Execute(reset="リセットメソッド名")

が実装されるようなので、それを使えばいいと思います。