snuffkinの遊び場

IT関係、スポーツ、数学等に関することを、気が向いたときに書いてます。

アノテーション+掟

フレームワーク論の話を見ての思いつき。

アノテーション」のフレームワークは解の一つとして良いと思いますが、実行しないと意図した通りに実装したのか分らない物が多い(「規約」ベースも同様)。特に規模の大きなプロジェクト程、規約通りに作る事にはコストがかかる。だから、kijimunaみたいなものは私は歓迎。

という訳で、Urumaのケース。
Actionに対応する画面定義が存在するかチェックするIrenkaのHackを作ってみました(ソースの中身はいい加減な部分もありますので、実際にはそのまま使えないでしょうけど)。

こうしておけば、Hack適用時にActionに対する画面定義が存在するかどうか分かるので、実装時に確認できます。

    /**
     * @when
     *   action : {@link CtClass}
     *   ctPackage : {@link CtPackage}
     *   
     *   action.simpleName =~ ".*Action"
     *   action.parent = ctPackage
     */
    public void detectAction(CtClass<?> action,
                             CtPackage ctPackage,
                             Messager messager,
                             Filer filer)
    {
        // リソースのルート
        String resuouceRoot = "src/main/resources";
        
        String packageLocation = ctPackage.getName().replaceAll("\\.", "/");
        String resuouceDir = resuouceRoot + "/" + packageLocation;
        String fileName   = action.getSimpleName().replace("Action", "") + ".xml";

        // あるべきxmlファイル名
        String fileFullName = resuouceDir + "/" + fileName;
        
        boolean isExist = filer.getFile(fileFullName).exists();
        if (isExist == false)
        {
            messager.warn(action, "対応する画面定義(" + fileFullName + ")が存在しません");
        }
    }

インタフェースで規定しないがために発生する弱点は、掟を守る手段を作ってフォロー。