$30 off During Our Annual Pro Sale. View Details »

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

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

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

threetreeslight

October 04, 2013
Tweet

More Decks by threetreeslight

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

  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  

    View Slide

  4. sec�on:  DB‰@¿64A  

    View Slide

  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();  

    View Slide

  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();  
    }  

    View Slide

  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  

    View Slide

  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  

    View Slide

  9. Q:  V1ªÀ°ºˆa›˜ZLÁ@ÂAŠÃ  
    V1‰Tableœ~uAŠi9Controllerˆ|˜Žs„zjp‹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  

    View Slide

  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  

    View Slide

  11. sec�on:  View…Controller  

    View Slide

  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  

    View Slide

  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‰…—  

    View Slide

  14. sec�on:  !1¿´§©­  

    View Slide

  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  

    View Slide

  16. CoC  is  important.  

    View Slide