controllerとviewの基本的なことを教えてください

2012年6月8日 at 6:19

あまり考えずにごそごそブロックを作っていたら、controller.phpがちょっとで、view.phpが巨大になってしまいました。

つまり、本来controller.phpで行うべき処理を全部view.phpでやってしまっているんかもしれません。

簡単に言えばview.phpで、データベースの一覧表を表示するために、データベースを読み込んでHTMLを組み立ててechoで表示を行っています。このとき5、6つのテーブルを参照しながらのHTMLの組み立てなので処理が複雑になっています。

なんとなくデータベースを読み込む処理はcontroller.phpに移した方がいいのかなと思うのですが、テーブルの読み込みとHTMLの組み立てが絡んでいるので、データベースの読み込みだけcontroller.phpに移すととても面倒。ならば、HTMLの組み立てもcontroller.phpに移すとview.phpは、基本的にechoだけ?

HTMLの組み立ては表示のための組み立てだからview.phpではないのかなと思ったり。

controller.phpとview.phpの役割分担の考え方を教えていただけないでしょうか。

タグ:

Re: controllerとviewの基本的なことを教えてください

2012年6月8日 at 8:19
僕の見解ですがconcrete5でのルールは
controller.php は ユーザーが加工しない。
view.phpはカスタムテンプレートの作成をするため加工することができる。
と考えています。

getXxxxx というメソッドがあればsetXxxxxというメソッドも用意されていますし、
書き間違うだけで問題が発生します。
SQL文がそのまま書いてあれば違うように変更される可能性があります。
できる限り、データの読込み、加工はcontroller.phpでするべきだと思います。

view.phpではプログラマーではない人が加工するということを考慮してコーディングすべきではないでしょうか。

たぶん。。。。。。。
 

Re: controllerとviewの基本的なことを教えてください

2012年6月8日 at 10:11
yamanoiです。

既存のautonavブロックを参考にして、controllerにコードを移すのがよいと思います。
 

Re: controllerとviewの基本的なことを教えてください

2012年6月8日 at 10:59
concrete5のいけないところでもあり、僕もちょくちょくやってしまうのですが、viewにロジックを書くのは極力避けた方が良いです。

HTMLとテーブルの読み込みが関係しているとしてもそこは分ける事が可能だと思います。

逆にcontrollerにHTMLタグを書くのも極力避けた方が良いです。

DBの読み込みやデータの加工等でcontrollerが肥大化する様であれば、modelやtoolsに分けるのもアリだと思います。
 

Re: controllerとviewの基本的なことを教えてください

2012年6月8日 at 14:17
みなさんいろいろありがとうございました。

開発が一段落したので、controllerに移す作業を優先しようと思います。

で、これまた基本的なことなのですが、昔で言うメインルーチンがないのでどうも取っ付きが悪いのですが、controllerは、処理ライブラリの集まりなので、昔のメインルーチンに近い雰囲気のviewで作ってしまったように思います。つまり、viewからcontrollerのライブラリを呼び出す感じ。

でも他のブロックを見ていると、controllerがviewを実行させている感じですよね。

controllerのメインルーチンの役割をするコードはどうやって書くのでしょうか。というか、ページが開いたときにまずデータベースの読み込みを始めたいのですがどこにどうやって書くのでしょうか。
 

Re: Re: controllerとviewの基本的なことを教えてください

2012年6月8日 at 18:21
オブジェクト指向ではメインルーチンという考え方は無いと思います。あえて言うならコンストラクタでしょうか?オブジェクト指向以前とコーディングの仕方がぜんぜん違うので

>controllerがviewを実行させている感じですよね。
controller(データ読込・加工部)とview(表示部)は親子ではなく並列で機能によって分けられたものと考えたほうがいいと思います。controller の view() の処理が終わったらview.phpに処理が移行するという感じでしょうか。

>controllerのメインルーチンの役割をするコードはどうやって書くのでしょうか。
view() に書くのがいいと思います。
 

Re: controllerとviewの基本的なことを教えてください

2012年6月9日 at 8:03
controller.php の中は全部functionですよね。なにかのイベントでそれぞれ呼び出されるというのはわかります。

最初は、コンストラクターが呼び出されるというのはわかりますが、次といいますか、ページが開いたときcontroller.phpのどのfunctionを呼び出すのでしょうか。

view()とうfunctionを作れば、view.phpを実行する前にそこを呼び出してくれるということでしょうか。

他のブロックのコードを見てもview()といyのはないのですが、そういう意味ではないのでしょうか。

なにか誤解しているか、そんなことはどうでもいいのかも知れませんが、古い私にはそこが気になるしよくわからないのです。よろしくお願いします。
 

Re: controllerとviewの基本的なことを教えてください

2012年6月11日 at 7:24
理屈はよくわからないものの、controller.php にview() を作って、view.phpにあったコードをほとんどそのまま、そこに移動したところ、とりあえず動作しています。
これから逆に一部を、view.php に持って行く作業をしてみます。

関連ですが、add.php とか edit.php もview.php と同格といいますか、そこでデータベースを読み込んだりして処理するのはよくないですかね。
 

Re: Re: controllerとviewの基本的なことを教えてください

2012年6月11日 at 7:53
add.php や edit.php はカスタムテンプレートが作成できないのでDB読み込んでも問題ないと思います。
しかし、MVCの概念にのっとってコーディングするならやはりcontoroller.phpに書くのがいいと思います。