SeasarCon2009White: Slim3のすべて

※2011/01/18追記: どうも勘違いする人が多そうなので、追記しておきます。ここに書いてあるSlim3は現在のGAE向けのフレームワークのSlim3ではなく、その前に構想されていたSpringの薄いラッパーとしてのSlim3です。名前は一緒だけど全然別物ですし、現状、実体としては存在しません。なので今更この記事みても得るところはほとんど無いのでご注意ください。

- もう少しでリリースできそう

- full-stack web application framework

- slim3 is agile
    HOT deployment
    Less configuration 
        CoCとAnnotationでの指定をうまく混ぜながら。
        only CoCとかall annotation(1つのメソッドに5つぐらいついてるとか)はやりすぎ。
    Less learning cost
        Struts1.2系とJDBCの薄いラッパー
            経験があればすぐ分かる
            1日かからずに基本的な使い方が分かる、と思う
            ちなみに今までのSeasarだと1日半ぐらい

- Less is More
    モダン建築の人が言い出した概念らしい
    パレートの法則
        slim3では20%の問題を解くことに集中
        経験上複数PJで共通的に使える部分はだいたい20%ぐらいだと思う

- #おお、Springをベースにしてる

- Slim3 Container
    Less configuration
    HOT deployment
    For functinal requirements
        ユーザ要件に関するコンポーネントを管理することを想定
        なんでも管理するわけじゃない
        非機能要件てきなものは、Springをそのまま使う
    Annotationは全てJava標準に従う
    DI
        @Resource
        フィールド名ベースでコンポーネントをDI
        name属性で明示指定も可能
        シンプルなコンポーネント名解決戦略 (資料参照)
            これで対応できない場合は、springの設定ファイルに書けばok
        Constant injection
            定数を自動インジェクションする
            #面白そう
    Transaction
        @TransactionAttribute
        デフォルトのトランザクションはREQUIRED
        valueで別のタイプを指定できる
    AOP
        Seasar2と同様に、AOP allianceの仕様に基づく
        デフォルトインタセプタ
            あるパッケージ以下に同じインタセプタを仕掛けることが簡単にできる
        @Interceptors
            個別にAOPも仕掛けられる
    Slim3としてSpringに登録するクラスは3つだけ
    アプリケーションサーバを自動認識してトランザクションマネージャの設定をしてくれる
    Seasar2のenvは、Slim3ではstageという概念になっている
        Stageごとに細かく設定を切り替えることができる

- Slim3 Struts
    Slime3 StrutsではAcitonFormは分離せずにAcitonに書いてしまうのが基本
        SAStrutsでは分離が基本だった
            AcitonFormをセッションに格納することになったときにActionと一体だと困る為
        Slim3ではフィールドごとにセッションに格納できるようになった @SessionScope
            これによってActionとActionFormを1つにしても困らなくなった。
    
    SAStrutsでは pretty URL のためクエリストリングを使わないようにしていた
        ただしオーバヘッドがある
        Slim3ではシンプルにクエリストリングをそのまま使う

- Slim3 JDBC
    S2JDBCとはだいぶ違う
    以下を解決することに集中
        Connection, Statement, ResultSetのcloseとか
        ResultSet→Javaへのコンバートとか
    外だしSQLは対応
    S2JDBCの流れるようなインタフェースは非対応
        S2JDBCユーザで使い分けに悩んでる人もいたので、Slim3では割り切ってSQL書こうぜ!というスタイルにした
        ただし、基本的なfindById,update,deleteとかは自動生成しようと思っている
    新機能
        SQLのバインド変数の部分で型指定できるようになった
            Mapによるパラメータ渡しが可能になった
            SQLファイルから条件DTOを自動生成できる (dbFluteっぽい)
        SQLのIFコメントはやめた?
            Javaコードで条件を組み立てられるようになった。
        件数取得のSQLをわざわざ作らなくても、検索用のselect文をgetCountに食わせるとcountに置換して実行してくれるようになった。
        Slim3では、気持ちよくSQLをかけるようにサポートをしている

- 例外のエラーメッセージがユーザフレンドリー
    どうやったら解決するかをサジェストしてる

- HOT deployのセッション問題に対応済み
    セッションのラッパーを入れた