質問: new ArrayList(); if (entities != null || entities.size() > 0) { for (Model model : entities) { views.add(new ModelView(model)); } } return views; ``` というのが一番メモリ的にもパフォーマンス的にもいいのかと思いますが、 こういったケースで推奨されている実装はあるのでしょうか? ご回答ありがとうございました。 まず、Modelクラス内に取得メソッドを、という回答についてですが、 すみません、前提条件を記載しておりませんでした。 基本的に、リクエストスコープの変数をJSPなりJSTLで出力しようとしていました。 今回の場合、以下のような形になると想定します。 ``` ``` この方法では、getter/setter及び、ローカル変数の定義が必要だったと思います。 ですが、このModelクラスはSpringJPAのEntity定義に基づいており、 いろいろDB関連の定義が多く含まれているので、あまり例外的な定義したくありませんでした。 また、JSTLタグlibraryのfmtなどを使う方法もあったかと思いますが、 個人的な理由ですが、HTML/JSPが好きでなかったため、サーバーサイドでリクエストスコープに置く変数そのものをVIEW用に正規化した状態で持ちたいです。 そのため、 ListからListに詰め替えるというのは非効率的だし、 それぞれのセッションが同時にこの関数を実行したときに、メモリの心配もあるなと思い、 なにかエコな実装があるかなと思った次第でした。
回答: 背景となる情報が確定すればさらに良い回答があるかもしれません。 フレームワークやテンプレートライブラリの制約、プロジェクトのコード規約でこのパターンが適用できないこともあると思いますが、 そもそもビュー用のフィールドではなくメソッドを用意する方法はどうでしょう? (下の例のメソッド名は微妙ですけど) ``` public class Model { ...各フィールド定義 + getter/setter ... public String dateView() { return DateUtils.format(getDate(), "yyyy-MM-dd"); } public String enableView() { return getEnabled() ? "YES" : "NO"; } } ``` view的なクラスなら多分、1リクエストで1回しかview用の処理が呼ばれることはないでしょう。 それならフィールドに保存せずにメソッドを用意しておくと良いと思います