###はじめに
今回は、プログラムのコード等に関する質問ではありません。
当然、今回の質問に対して状況や考え方など正解という正解もなく、また不正解ということもないのは理解しております。
例題に関しても、それならそもそももっと細かくわけるなどあると思いますが、アドバイスやいろんな情報を共有できればと思います。
指摘というよりは、こういう考え方などのご意見を求めています。
###処理の分け方等に関して
処理を分ける、、、最近、classなんかもなんとなくこうやれば動くというのはできるようにはなってきましたが、はっきり言って、それぞれの役割や、この処理はこっちなどがまだまだ理解不足であると認めざるを得ません。
MVCをフルスクラッチで書いておりますが、、、初心者にありがちかどうかはわかりませんが、、、
indexがあり値を送信してからの処理などをcontrollerで処理しまくって、DBに関わることだけをmodelに流すということをしていました。
それはそれで動くのは当然な部分もありますし、変な話処理はこっち、DBに関するものはこっちという分け方は、初心者からするとわかりやすい感じもしました。
しかし、もう少しネットの解説なりなんなりを見ていくと、やはりこの認識ではちょっと違う部分の方が多い、、、ということはわかってきつつも、、、
では、実際にこういう処理をする際の流れの中で、この処理はこっち、この処理はこっち、、、
そもそもそれはフロントサイドですればいいということが、分けきれず、逆にいろんなところにメソッドを振ってしまい、あれ、、、これはあっちか、、、あっこっちかという状況になってしまいました。
そこで、例として、ある処理の流れを元に書くならこっちというアドバイスをいただければと思い、質問いたしました。
###例:値をDBにInsertする処理
HTML
1<form action="" method="POST"> 2 <input type="text" name="name[first]"> 3 <input type="text" name="name[family]"> 4 <input type="submit" name="submit" value="送信"> 5</form>
上記のとおり、簡単に姓と名を入力後送信を押すといろいろチェックしたりして、登録するという流れを考えていこうと思います。
今回のファイル構成をざっとですが、、、
[index.php] // 実際に画面に表示されている
[controller.php]
[model.php]
[db.class.php]
他にfunctionやらもあるでしょうが、そのあたりは省略いたします。
db.class.phpには汎用的に使えるclassがあるとします。
さて、私がまず処理を箇条書きで出すとしたら
1.POST送信があったか?
2.name['first'], name['family']に値がセットされているか?
3.2でセットされていなければエラーを出して次の処理にはいかない
4.2でセットされていれば、その文字の正規表現チェック(数字など混ざってないか?)
5.2の値を元にDBにデータがあるかチェック
6.DBにデータがあったら登録せずに、エラーを出す
7.DBにデータがなければ送信された日付を配列に追加する
8.DBにfirst, family, dateを登録する
このように抜き出しました。
実際はもっと細かく、、、があるかもしれませんが、大まかに書き出しました。
次に、私が今の理解度で上記の処理を振り分けるなら、、、
1 = indexでif($_SERVERとかif(filter_inputとかで判定する
2 = controllerに値を飛ばして、さらにmodelに値を渡し、modelでセットされているかチェックする。
3 = modelからの返りがエラーであれば、controllerで$errorを出してindexで表示
4 = modelでそのまま正規表現のチェックを行い、エラーなら3同様
5 = modelからdbにアクセスしチェックを行う(SELECT)
6 = trueだったら既に登録済みなので、3同様
7 = modelで日付をセットさせる
8 = modelからDBにInsertさせる
とりあえず、こう考えてみました。
ということは、indexでcontrollerのインスタンスでInsert()みたいなメソッドで処理が始まり、controllerではmodelのインスタンスを作りmodelでいろいろ処理をしている感じ?になるのかな?という感じです。
まぁ、この例程度の処理であれば、こういう処理をわけるほうがあっちこっちになるかもしれませんが、アドバイス等よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/17 01:53