どこで表示用のデータを作るか?

例えば、検索結果の一覧を表示するデータの表示において
ログインユーザの権限によって表示するデータを変える


という仕様があった場合、

  • JSP側で表示制御
    • 標準タグライブラリを駆使する
    • カスタムタグを作成
  • Servlet側で表示制御
    • Servlet側で表示用Beanを詰めて、JSP側では出力するだけ


の2通りのやり方が考えられますが、私はよほどのことが無い限りServlet側で表示用Beanを作成します。
テストの容易さと言うことであれば、カスタムタグでも良いと思われるかもしれませんが、
仮に同じロジックでダウンロード用のCSVファイルやPDFファイル作成する場合に
データ作成ロジックはそのまま使いまわせるということもメリットになるでしょう。

画面、CSV出力それぞれでロジックを保有してしまうと、そのロジックに変更があった時に
修正漏れが起きるかもしれないので、全く違う情報を出すのでない限り、少しくらい冗長してても*1、表示用Beanを作成する方式が楽できると思っています。


JSP側のテスト実施は、JUnitでのテストに比べると面倒で漏れやすいので、
判断文の数や記述量が増えると保守しづらくなってきます。
表示するデータ設定はServlet側に責務を持たせて、JSP側では設定されている値を表示するだけ
の方が、修正する際にあっちこっち処理が分散せずに良い気がします。


ただ、DBから取得してきたEntityと同じようなプロパティを持つ表示用Beanを作成&詰めなおしするので、
無駄にメモリを消費したり、処理のオーバーヘッドがかかる、と思ったりもするのですが・・・。

*1:CSVの時だけに必要なプロパティを持つとかそういうことです