Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MVCモデルで誰に何を任せれば良いのか?

 MVCモデルで誰に何を任せれば良いのか?

レガシーシステムにオレオレMVCを少しずつ構築にまつわり、社内からの質問と回答

threetreeslight

October 04, 2013
Tweet

More Decks by threetreeslight

Other Decks in Technology

Transcript

  1. MVCµ«º„   _ˆ œ|™‹Rnqà   2013/10/4  

  2. <%ŠAY„s˜v†i   $cˆ“—~nÁ´§©­ÂŠ   _ÁMVCˆ|™‹Rn‰Ã   Y>y~nw…  

  3. MVCž±¹¢À¥·¾‰   ¡¸Ÿž¾¬   1.  HTTP¹¡ ¦¬     (URI,

     HTTP´§©­)   Rou�ng  /     Dispatcher   Controller   DB   Model   2.  URI…´§©­‰Y:   View   3.  ž¡¥·¾ÁA‰-#   5.  DB‰A   ÁCRUD   8.  ¶À¤ÀUKHTMLœB*   4   6   7   9   10.HTTP»¦³¾¦   Applica�on  
  4. sec�on:  DB‰@¿64A  

  5. Q:  DB‰90 ÁCRUDŠ_‰à   ’€šModel‰„zjUser  Table…User  Modelœ ˆ…ƒ^5yzj   User

     Table   User  Model  Class   SELECT  *  FROM  user  WHERE  id  =  100;   INSERT  INTO  user  VALUES(‘taro’);   Read:   User::find(100);   Create:   $user-­‐>save();   UPDATE  user  SET  name  =  ‘kotaro’  WHERE  id  =  100;   Update:   $user-­‐>save();   DELETE  user  WHERE  id  =  100;   Delete:   $user-­‐>destroy();  
  6. Q:  Dfq–Userb²¨¾r+x™~…sŠÃ   bq–…nƒiH/User  Model‰AœŒ}o…;yƒŠnv|jUserDfˆa ›˜AŠUser  Controller„¸©±z˜„¥¾±º‡Nœ ,yzj   User

     Table   User  Model  Class   Delete:   $user-­‐>destroy();   User  Controller  Class   delete-K   Rou�ng  /  Dispacher   Public  func�on  delete()  {      $id  =  $_GET[‘$id’];      $user  =  User::find($id);      $user.destroy();   }  
  7. Q:  UserOdDf‰UK…}‰AŠÃ   64Df‰UK…64AŠ5KGˆeyzjF‡˜.˜QnŠF‡˜´§©­ˆz˜w… „iC'’h—zj   User  Table   User

     Model  Class   Update:   $user-­‐>save();   User  Controller  Class   64‰-K   Rou�ng  /  Dispacher   Public  func�on  update()  {      $id  =  $_GET[‘$id’];      $name  =  $_POST[‘$name’];        $user  =  User::find($id);      $user-­‐>name  =  $name      $user.save();   }   Public  func�on  edit()  {      $id  =  $_GET[‘$id’];      //  smartyUKC!1      $user  =  User::find($id);   }   OdDf‰UK   Od  
  8. Q:  UserªÀ°ºˆa›˜ZLÁ@ÂAŠÃ   k¶À¤À‰1lk¶®À¡‰´Àºž­»¦„m˜qÃlk¯¦½À­ˆr™ƒn˜ qÃl‡†‰‰ªÀ°ºˆa›˜AŠiµ«º„Tnzj   User  Table   User

     Model  Class   SELECT  count(*)  as  count  FROM  user;   SELECT  count(*)  as  count  FROM  user     WHERE  mail  =  $user-­‐>mail;   count:   User::count();   Unique  check:   $user-­‐>isUniqueMail();   //  return  boolean  value   name  include  in  password:   $user  =  new  User();   $user-­‐>name  =  ‘hoge’;   $user-­‐>password  =  ‘hogehoge’   $user-­‐>isIncludedNameInPassword();   //  return  boolean  value  
  9. Q:  V1ªÀ°ºˆa›˜ZLÁ@ÂAŠÃ   V1‰Tableœ~uAŠi9Controllerˆ|˜Žs„zj p‹i¶À¤À…ž­»¦ ªÀ°ºr7˜…sˆiž­»¦œ’ƒt˜‰ŠUser  Modelq–ToŽs„Š7—|j   User  Table

      User  Model  Class   Public  func�on  show()  {      $user  =  User::findByEmail(‘[email protected]’);      $addresses  =  Address::findByUserId($user-­‐>id);     }   User  Controller  Class   Address  Model  Class   Address  Table  
  10. Q:  V1ªÀ°ºˆa›˜¬¸¾¤¡¥·¾ŠÃ   V1‰Tableœ~u64A’Controllerˆ|˜Žs…&ƒnzj~i}‰…sˆV 1‰£¾¬¼À¸‰update´§©­œCz˜Žs„Š‡n…PpƒzjÁ3#Š„s|Â   User  Table   User

     Model  Class   Public  func�on  show()  {        $user  =  User::findByEmail(‘[email protected]’);      $addresses  =  Address::findByUserId($user-­‐>id);          try{          $dbconnec�on-­‐>beginTransac�on  ();          $user-­‐>email  =  ‘[email protected]’;          $user-­‐>save();          foreach(  $addresses  as  $k  =>  $address  ){              $address-­‐>city  =  ‘tokyo’;              $address-­‐>save();          }          $dbconnec�on-­‐>commit();      }  catch  (Excep�on  $e)  {        $dbconnec�on-­‐>rollback();      }   }   User  Controller  Class   Address  Model  Class   Address  Table  
  11. sec�on:  View…Controller  

  12. Q:  £¾¬¼À¸ÀŠ à   1view  1controller„Š‡ti9ªÀ°ºÁ=JˆŠURI‰…—ÂrRn…Ppƒ zj   User  Table

      User  Model  Class   //  ¶À¤À‰XUK   Public  func�on  index()  {}     //  ¶À¤À‰[MUK   Public  func�on  show()  {}     //  ¶À¤À‰4W`   Public  func�on  new()  {}     //  ¶À¤À‰ *   Public  func�on  create()  {}     //  ¶À¤À‰(‰Od   Public  func�on  edit()  {}     //  ¶À¤À‰64   Public  func�on  update()  {}     //  ¶À¤À‰b   Public  func�on  delete()  {}   User  Controller  Class   //  ¶À¤À‰XUK   /user  (  get  method  )     //  ¶À¤À‰[MUK   /user/:id  (  get  method  )     //  ¶À¤À‰4W`   /user/new  (  get  method  )     //  ¶À¤À‰ *   /user  (  create  method  )     //  ¶À¤À‰(‰Od   /user/:id/edit    (  get  method  )     //  ¶À¤À‰64   /user/:id    (  put/patch  method  )     //  ¶À¤À‰b   /user/:id    (  delete  method  )   Router  /  Dispacher   URI‰…—   Address  Model  Class   Address  Table  
  13. Q:  ªÀ°ºˆa›–‡nview‰£¾¬¼À¸ÀŠÃ   8UK‰DfÁView‡†ŠªÀ°ºˆa›–‡n“idashbord‰•o‡ rm—zj }‰cŠ)ˆ£¾¬¼À¸Àœ ƒyƒg‡n„zj   //  8UK

      Public  func�on  index()  {}     //  dashbord   Public  func�on  dashbord(){}   Root  Controller  Class   //  ¶À¤À‰XUK   /   Router  /  Dispacher   URI‰…—  
  14. sec�on:  !1¿´§©­  

  15. !1…´§©­   ŠœUyzj!1“´§©­ŠIE|{i5KG‡œvy”oj   ~i´§©­ŠS]‰2?Gˆ=yt‚v˜…iAYr   //  user  1  

    $user  =  User::find(1);     //  user  V1   $users  =  User::findAllByCity(‘Tokyo’);     //  V1User‰foreach   foreach($users  as  $key  =>  $user  ){    …   }   !1   //  user‰1   $user  =  User::count  (1);     //  //  user‰´ÀºJ\œ"yƒn˜qà   //  ‘‡   $user.iv();     //  Rn   $user.isVerified();     //  V1User‰foreach   foreach($users  as  $key  =>  $user  ){    …   }   a1  
  16. CoC  is  important.