ホームページ >バックエンド開発 >PHPチュートリアル >mvc における C と V の保守性と堅牢な再利用性について説明します。
mvc は誰もがよく知っており、基本的な構造も非常に明確です。
今日は、
コントロール層では、コントローラー内で適切なメソッドはいくつありますか?
そして、表示層を複数回呼び出すことができるかどうか (基本的にユーザー ページの追加やユーザー ページの変更など) について説明します。同上)。
追加と変更に 1 つのページを使用すると、コントロール レイヤーを追加するか変更するか、コントロール レイヤーを追加または変更した後にどのページにジャンプするかを決定するための論理的な判断をビュー内に書きすぎてしまいます。 。 (これらには、表示レイヤーで action value または name 属性を指定するか、get または post を通じてこれらの判断を送信して、それらを別の制御レイヤーに渡す必要があります。)
古いシステムを保守しているため、非常に混乱しています。
古いプロジェクトのコードをどのように改善する必要があるのかを確認するために、コード スニペットを投稿します。関数を入力するたびに、その関数が何を行うか、メンテナンスにかかる時間を常に分析する必要があるからです。コードを読むのは無駄が多すぎます。ぜひご教示ください。
例: コントロール層 // はメンバーを変更するために記述されていますが、その中の一部の関数はメンバー データを変更するものではありません。プロジェクト内の他の場所のコードも同様、またはそれ以上です。メソッドに入るたびにプロセスが実行するのは、どれを実行するか、どこで終了するかだけです。ジャンプするときに view(XXX.php) をコントローラーの名前に置き換えることもできます。これにより、上で述べたことを繰り返し、コード分析の別のループに入ることができます。メンテナンスが非常に不便です。このアイデアをどのように処理する必要がありますか?また、今後の改善のためにどのような点に注意を払う必要がありますか? 建設的な提案をいただければ幸いです。ありがとうございます。
//----------------修改成员数据------------------------------- public function alterInfo() { $strAction = ""; $teamname=$_SESSION['teamname']; if ($_GET){ $inUserid = $_GET['id']; $data['userid'] = $inUserid; } if($_POST){ // var_dump($_POST); // die(); $userid = $_POST['userid']; $mobile = $_POST['mobile']; $realname = $_POST['realname']; $zhengjian = trim($this->input->post('zhengjian')); //$idnumber = $_POST['idnumber']; $idnumber = trim($this->input->post('idnu')); $address = $_POST['address']; $zipcode = $_POST['zipcode']; $clothsize = $_POST['clothsize']; $data['strClothOpt'] = $this->Common_model->getClothOpy($clothsize); $birthday = trim($this->input->post('birthday')); $passportnu = trim($this->input->post('passportnu')); $gender = trim($this->input->post('gender')); if ($_FILES["idnumscan"]["error"] > 0) { $data['error'] = $_FILES["idnumscan"]["error"] . "<br />"; $userpic = $_POST['idnumscans']; } else { $data['filename'] = $_FILES["idnumscan"]["name"]; $data['filetype'] = $_FILES["idnumscan"]["type"]; $data['filesize'] = ($_FILES["idnumscan"]["size"] / 1024) . " Kb"; $data['filepath'] = $_FILES["idnumscan"]["tmp_name"]; $excelname=iconv("UTF-8","gb2312", $_FILES["idnumscan"]["name"]); $userpic = $_FILES["idnumscan"]["name"]; move_uploaded_file($_FILES["idnumscan"]["tmp_name"],"upload/image/".$excelname); } if($_POST['action']=="add"){ $strAction = $teamname; $data['userid'] = ""; //倒数第二位是奇数为男性,偶数为女性 $gender = substr($idnumber,16,1)%2; //var_dump($gender); $teamid = $_SESSION['clubid']; $usertype=0; $this->load->model('Member_model'); $rowIsReg = $this->Member_model->isRegistered($idnumber,$clubid); if($rowIsReg){ echo "<script>alert('这个身份证号已经在该俱乐部被注册过!')</script>"; //redirect(base_url()."member"); }else{ $res = $this->Member_model->insMember($mobile, $realname, $idnumber, $gender, $address, $zipcode, $clubid, $usertype,$userpic,$clothsize); if($res){ echo "<script>alert('新队员创建完成!')</script>"; redirect(base_url()."team"); } } } if($_POST['action']=="alert"){ // var_dump($zhengjian); // die(); $strAction = $teamname; $data['userid'] = $userid; if($idnumber!='' and $zhengjian =='1'){ //用身份证增加或修改的 //倒数第二位是奇数为男性,偶数为女性 $gender = substr($idnumber,16,1)%2; //var_dump($gender); $clubid = $_SESSION['clubid']; $usertype=0; $this->load->model('Member_model'); $rowIsReg = $this->Member_model->isRegisteredtoo($idnumber,$clubid,$userid); if($rowIsReg){ echo "<script>alert('不能修改为".$idnumber.".这个身份证号已经在该俱乐部被注册过!')</script>"; //redirect(base_url()."member"); }else{ $res = $this->Member_model->alertMember($mobile, $realname, $idnumber, $gender, $address, $zipcode, $clubid, $usertype,$userpic,$clothsize,$userid,$birthday,$passportnu); if($res){ echo "<script>alert('队员".$realname."数据修改成功!')</script>"; redirect(base_url()."team"); } } }else{ //用护照增加或修改的 // echo "111111111111"; // die(); $clubid = $_SESSION['clubid']; $usertype=0; $res = $this->Member_model->alertMemberpassportnu($mobile, $realname, $idnumber, $gender, $address, $zipcode, $clubid, $usertype,$userpic,$clothsize,$userid,$birthday,$passportnu,$gender); if($res){ echo "<script>alert('队员".$realname."数据修改成功!')</script>"; redirect(base_url()."team"); } } } $arrMember['userid'] = $userid; $arrMember['mobile'] = $mobile; $arrMember['realname'] = $realname; $arrMember['idnumber'] = $idnumber; $arrMember['address'] = $address; $arrMember['zipcode'] = $zipcode; $arrMember['userpic'] = $userpic; $arrMember['clothsize'] = $clothsize; //var_dump($arrMember); }else{ //-----显示队员信息 $strAction = $_SESSION['teamname']; $arrMember = $this->Team_model->getMemberInfo($inUserid); $data['strClothOpt'] = $this->Common_model->getClothOpy($arrMember['clothsize']); } $data['straction'] = "alert"; $data['arrMember'] = $arrMember; $data['strAction'] = $strAction; $this->load->view('head'); $this->load->view('player',$data); $this->load->view('foot'); }
モジュール設計の原則によれば、入口と出口は 1 つです。 1 つのモジュールで 1 つのことを完了します
明らかに設計に一貫性がありません
$inUserid = $_GET['id'];
合法性を判断する必要はありませんか?とても危険ですか?
if($_POST['action']=="追加"){ . 。 。 。
if($_POST['action']=="alert"){
これで分岐が作成され、関数はモジュールに従って処理されます。
先輩二人、ありがとうございます。これは以前からの古いプログラムで、いつも何かが間違っていると感じています。お二人からの指摘で、わかりました、ありがとうございます。