新たな客先

上でも書いたように、先週末から新たな客先です。
で、そのお客様から作業説明やなんかを受けたのですが、その中で「うちではこんなこととかもやっています」っていわれて、自信満々にStrutsの拡張FWやSQL発行用のライブラリをわたされたのですが・・・・

ドキュメントの品質はものすごくすばらしかったです。ええ、ほんとに。
しかし、肝心のFWの設計自体が・・・そういう方針なのかどうなのかまだわからないのですが、Struts がDBアクセスまで面倒みてます。プレゼンテーション層とサービス層のようなレイヤ分けの概念もありません。

イメージを伝える一例ですが、以下のようなサンプルコードでした。

public class SampleAction extends FWAction {
  public void execute(ActionForm inputForm, Connection connection, Output output) throws Exception {
    
    SampleBusinessLogic logic = new SampleBusinessLogic(connection);
    logic.execute(inputForm, output);
    return "success";
  }
}

public class SampleBusinessLogic extends BusinessLogic {
  public SampleBusinessLogic(Connection conn) {
    super(conn);
  }

  public void execute(ActionForm form, Output output) {
    Integer id = form.get("id");
    Map paramMap = new HashMap();
    paramMap.put("id", id);
    List resultList = executeQuery("検索クエリ名", paramMap);
    output.setValue("resultList", resultList);
  }
}

resultList はDBからの検索結果を格納したリストです。検索結果の1行をMapのオブジェクトとして、カラム名をMapのキーに、値をMapの値に持っています。
Output はおそらくそのままリクエストの属性に設定されるなどして、JSPで表示されるものと思われます。


ビジネスロジックである SampleBusinessLogic にもろにプレゼンテーション層の部品が混じりこんでいます。DBと画面が直に繋がっているって感じに近いですね・・・
最近の流行であるDIコンテナを利用した設計などからははるかに遠いところにありますね・・・ただ、これを正だと信じているひとに、明確にヤヴァイと説明するだけの言葉をもっていないので、月曜からどうしたものだろうと・・・
まだ、このフレームワークを使うと決まったわけではないのでよいのですが、このさき Webアプリ開発に割り当てられた場合、使用を強制されることはほぼ確定しています。

とりあえず、上記Struts拡張フレームワークで私が気に入らない点。

  • プレゼンテーション層の要素(ユーザの入力、JSPへの出力)がサービス層にまで入り込んでいる
  • サービス層でプレゼンテーション層のつくりを意識しなければならない(フォームに設定されているプロパティ名や、JSPに出力するときの属性名等)
  • そもそも Struts(を拡張したフレームワーク) に仕事をさせすぎ。トランザクションの開始と終了は Action クラスでおこなわれています。
  • MVCに沿った説明がかかれていたけど、M と V の関係理解している? M は V を意識しちゃいけないんですよ?
  • トランザクション管理等のWebの遷移制御などと直交する問題を、Web用のフレームワークに無理無理入れるのはどうなのよ?つか、もっといい方法が世にはあふれているし。
  • SQL用のライブラリも今一つ。正直SQL文を別ファイルにしたってこと以外のメリットが存在していません。せめて、戻り値の JavaBeans への簡単なマッピングは欲しい。(DBの結果をそのまんま画面に出したいだけとかいう考えのもと作られているならいらないんだろうけど・・・COBOL的?)


問題は、客先の中の人が本気で自社Struts拡張Fwをすばらしいものと思っているのかどうかがまだ分からないことか・・・本気でおもっているなら下手なことはいえないですし。後先考えずに月曜から全開でいくかどうするか・・・