質問: タイトルからではどのようなことをおこないたいのか想定出来ないと思いますので、 例を挙げてどのようなことを行いたいのか言いますので、 アドバイスいただけますと幸いです。 データベース(MySQL)からModelを用いて String型で ``` data1,data2,data3 ``` というデータを取って来たとします。 (このような形での格納は良くないですが・・・) そのデータを","区切りでHTML上で以下のように表示させたいです。 ``` data1 data2 data3 ``` そうしたい場合に処理のさせ方は3通りあると考えております。 1Java側でsplitを用いてListないしは配列に格納して、それをScalaテンプレートでforで回して表示する方法 2Scalaテンプレート側でScalaを用いて上記と同じように","区切りにして表示する方法(Scalaに関しては知見がないので避けたい) 3Scalaテンプレートにデータを渡して、JavaScriptで同じようにsplitを用いてHTMLを生成して表示する方法 抽象的な質問となりますが、どれが一番ベストなのでしょうか? 選択する観点と致しましては、 1HTMLの表示のさせ方はaタグ以外にも色々な形で表示させることを考慮する 2処理として、微量だと思いますが、パフォーマンスが良いもの 3可読性が良いもの この当たりになると思います。 何卒、ご教授の程宜しく御願い致します。
回答: 私は > > 1Java側でsplitを用いてListないしは配列に格納して、それをScalaテンプレートでforで回して表示する方法 > > > を推奨します。以下、理由を述べます。 Play Frameworkを含むあらゆるMVCにおいて、こうした方が良いという方針があります。 **ロジックをViewに書かない。** 今回の`"data1,data2,data3"`を分解するというのは文字列を処理するロジックです。ロジックですので、ViewであるScalaテンプレートに書くよりも、ControllerやModel側であるJavaで書いた方が良いでしょう。他にも理由があります。もし、あとでSQLの保存方式を変えた場合はどうでしょうか?もし、Scala側で処理していた場合、全ての処理を書き換えるか、Java側でわざわざ"data1,data2,data3"という文字列を生成してScalaテンプレートに渡さなくてはいけなくなってしまいます。ですが、Java側で分解しているのであれば、その分解する処理を変えるだけで済むでしょう。JavaScriptで処理するにしても、結局はViewの中に処理されていない文字列が入ることになるため、同じ問題がおきます。 なお、Java側と言っても、Modelに書くか、Controllerに書くかですが、私はModelに書くことを勧めます。プロパティとして持たせると言うよりも、`public List getDataList()`のようなメソッドを実装して、そこにアクセスするという手法です。こうしておけば、文字列のリストがどう保存されていたのかはControllerやViewには関係が無くなり、保守がしやすくなると思います。