ä»æ¥ãç§ã¯ããã€ãã®ä»£æ¿çãªèŠè§£ãšã¢ãããŒãã«å ããMVCãšãããžã§ã¯ã管çå šè¬ãåèããã®ã«åœ¹ç«ã€ãã¯ããã¯ã«æ³šç®ããŸãã èå³ã®ããæ¹-ç«ãžããããã
MVCãšã¯äœãããå§ããŸãããã ããã¥ã¡ã³ããããã®çŸããå³ãèŠãŸããïŒ
ᅩ

çè«çã«ã¯ããã¹ãŠãéåžžã«çŸããã§ããå³ã®ããã«ããã¥ãŒã¯ãŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ãã³ã³ãããŒã©ãŒã«æž¡ãããŠãŒã¶ãŒã¯å¿ èŠã«å¿ããŠã¢ãã«ãæŽæ°ããŸããæŽæ°ãå®äºããåŸãã¢ãã«ã¯ã³ã³ãããŒã©ãŒã«éç¥ãããã¥ãŒãæŽæ°ããŸãã ãã¹ãŠãã·ã³ãã«ã§ããã¹ãŠãæ©èœããŸãã ãã®ã¢ãããŒãã䜿çšããŠã倧èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ãå«ãæ°åãæ°åã®ã¢ããªã±ãŒã·ã§ã³ãäœæããŸããããiOSãMacOSã ãã§ãªããWebã¢ããªã±ãŒã·ã§ã³ãWindowsã¢ããªã±ãŒã·ã§ã³ãªã©ããã®ã¢ãããŒããã»ãŒ40幎é䜿çšããŠããå€ãã®ãã®ãæå³ããŸãã ãããã®å€ãã¯çŸåšãã®ã¢ãããŒãã䜿çšããŠãããåæã«åé¡ã¯çºçããŠããŸããã MVCã®äž»ãªå©ç¹ã¯ãç¹ã«iOSã§ã®äœ¿ããããã§ãã UIKitãã¬ãŒã ã¯ãŒã¯ã®UIViewControllerãšãã®åå«ã¯ããããã«äœ¿ãããå€ãã®æ©èœãšæ©èœãæäŸããŸãã å°èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ãäœæããã«ã¯ãããã°ã©ãã³ã°ã¹ãã«ã¯å®è³ªçã«å¿ èŠãããŸããã2æ¥éã®YouTubeè¬çŸ©ã§ååã§ãããéå§ã§ããŸãã åé¡ã¯ã倧èŠæš¡ãªãããžã§ã¯ãã§äœæ¥ããå¿ èŠããããšãã«å§ãŸããŸãã ãã¿ãŒã³ãšããŠã®MVCã®ã¹ã±ãŒãªã³ã°ã¯ããŸããããªããšããå€ãã®èšŒæ ãããããããMassive View ControllerãšåŒã°ããåé¡ã«ã€ãªãããŸãã
åé¡ã®åå
ç§ã®æèŠã§ã¯ããã®åé¡ã®çç±ã¯æ¬¡ã®2ã€ã§ãã
1. MVCã¯ãäœæããå¿ èŠããããšã³ãã£ãã£ãšã¯ã©ã¹ãããã³äœæããŠããªããšã³ãã£ãã£ãšã¯ã©ã¹ã«ã€ããŠæ確ãªæ瀺ãå®éã«æäŸããŸããã ç¹ã«iOSã§ã UIKit MVCã¯æåã¯UIViewControllerã®ã¿ãæäŸããŸãããåºæ¬çã«ã¯ããã ãã§ãã ãã¥ãŒã¯ååšããããæåã¯å®£èšãããŠããªããã€ãŸã ãã¥ãŒã®åå¥ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããããšãªããUIViewControllerã¢ããªã±ãŒã·ã§ã³ã®ã¿ããã®æ©èœãå®è¡ããŸãã ã¢ãã«ãšåãããšã ã¢ãã«ã®æ§é ãšã¢ãŒããã¯ãã£ãããã³ã³ã³ãããŒã©ãŒãšã®çžäºäœçšã¯ãéçºè ã®è¯å¿ãšæ³ååã«å®å šã«äŸåããŠããŸãã ããã¯ãå®éã«ã¯2çªç®ã®çç±ã«ã€ãªãããŸãã
2.ãã¡ã€ã³é åã®äžååãªç解ãéçºè ãå¿ èŠãªãšã³ãã£ãã£ãå²ãåœãŠãããšãã§ããªããããUIViewControllerå ã®äŸåé¢ä¿ãšæ©èœã®èç©ã ã€ãŸã éçºè ãæ°ããæ©èœãè¿œå ãããšãæ°ãããšã³ãã£ãã£ãäœæããŠæ¢åã®ã¢ãŒããã¯ãã£ããªãã¡ã¯ã¿ãªã³ã°ãã代ããã«ãViewControllerã«æ°ããæ©èœãè¿œå ãããŸãã
ã€ãŸã ãã®åé¡ã¯ãã¢ãŒããã¯ãã£ãšäžæ³šæ/æ æ ¢/æ iness /ç¡ç¥/çµéšäžè¶³ïŒäžç·ïŒéçºè ã®æ¬ é¥ã«ãã£ãŠçããçºçãããšèšãããã§ãã
æåã®åé¡ã®è§£æ±ºç
MVCåé¡ã®æåã®éšåãéšåçãŸãã¯å®å šã«è§£æ±ºããMVVMãMVPãVIPãVIPERãFluxïŒFacebookïŒãRibletsïŒUberã®ViperïŒãClean-Swiftãªã©ã®ã¢ãããŒãã¯ãããæ°å¹Žã§éåžžã«äººæ°ããããŸãã ãããã®å€ãã¯ãéçºè ã«ã¯ã©ã¹ãšãã®ã¯ã©ã¹ãäœæããå¿ èŠãããçç±ã«ã€ããŠæ確ãªæ瀺ãäžããŸãã ãŸããããŒã ãåããããžã§ã¯ãã«æºãã10人以äžã®éçºè ã§æ§æãããå Žåã¯ç¹ã«ãããŒã äœæ¥ãã¯ããã«å®¹æã«ãªããŸãïŒããšãã°ãUberã§150人ãJustEats 20人以äžãFacebookãæ€èšããã®ãæãã§ãããééããªã10人以äžã§ãïŒã ããã¯ãã³ã³ãããŒã©ãŒã³ãŒããã«ããŒããã ãã®å€æ°ã®å€ç«ãããªããžã§ã¯ãã®äœæãæå³ãããšããäºå®ã«ãããã®ã§ããããã«ãããããŒã å ã§å€§ããªæ倱ãªãäœæ¥ãåæ£ã§ããŸãã
2çªç®ã®åé¡ã¯ãŸã æ®ã£ãŠããŸãã ãã¥ãŒã¢ãã«ãšãã¬ãŒã³ã¿ãŒã¯ã©ã¹ã§VIPãšMVVMã䜿çšãã解æãšãããã³ã°ããããŒã¿ããŒã¹ã¯ãšãªãšHTTPãªã¯ãšã¹ãã®åœ¢æãŸã§ãè€æ°ã®æäœãå«ã1500è¡ä»¥äžã®ã³ãŒããå«ãå€ãã®ãããžã§ã¯ãã«åºäŒããŸããã éçºè ã®çµéšäžè¶³ãŸãã¯ã¢ããªã±ãŒã·ã§ã³ã¢ãŒããã¯ãã£å šäœã®ç解äžè¶³ã®åé¡ã¯ãåã«ã¢ãŒããã¯ãã£ãã¿ãŒã³ãå€æŽããã ãã§ã¯è§£æ±ºã§ããŸããã ç§ã®èŠ³ç¹ããã¯ãåã«ãããã©ã«ããã§å€§èŠæš¡ã§è€éãªãããžã§ã¯ãããµããŒã/äœæã§ãããé»éã®åŒŸäžžãã¯ãããŸããã ãããã«ãããããã«ã¯åŽåãåäœãã¹ããé©åãªèšç»ãããã³æéãå¿ èŠã§ãã
2çªç®ã®åé¡ãéšåçã«åé¿ããæ¹æ³ã«é¢ãããã³ããããéšå
1. ViewControllerãä¿é²ãã
ãŸã第äžã«ãè¯ãããšã«ãã¢ããªã±ãŒã·ã§ã³å ã®ã©ã®ãªããžã§ã¯ããè€æ°ã®æ©èœãæ åœããã¹ãã§ã¯ãããŸããïŒåäžè²¬ä»»ïŒã å€ãã®éçºè ã«ãšã£ãŠãããã¯æããã§ãããããã«ããããããã圌ãã®ã³ãŒãã¯ãã®ãããªåçŽãªä»®å®ã«æºæ ããŠãããšã¯èšããŸããã å€ãã®å ŽåãUIViewControllerãä»ã®å šå¡ãšåããªããžã§ã¯ãã§ããããšãããã³ã¢ãã«ãšãã¥ãŒããã€ã³ããããšãã1ã€ã®è²¬ä»»ã®ã¿ãå¿ èŠã§ããããšã¯æããã§ã¯ãããŸããã ã€ãŸã ãã¥ãŒãé©åãªã¢ãã«ç¶æ ã«ç¶æãããã®ç¶æ ãå€æŽããå¿ èŠãããå Žåã«ã¢ãã«ã«éç¥ããŸãã ç§ã®èŠ³ç¹ãããããšããã®å®çŸ©ãè¶ ãããã®ã¯ãã¹ãŠã³ã³ãããŒã©ãŒã«å±ããŠããŸããã ã¢ãã¡ãŒã·ã§ã³ãã¬ã€ã¢ãŠããæ§æãã¥ãŒãã¬ã³ããªã³ã°ã®å€æŽã解æããããã³ã°ãhttpãªã¯ãšã¹ããããŒã¿ããŒã¹ã¯ãšãªãããŸããŸãªã¬ãã«ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãµãŒãã¹ãªã©ããã¹ãŠã®ã¬ããŒãž-ãããã¯ãã¹ãŠã³ã³ãããŒã©ãŒã«å±ããŠããŸããã ãããã¯ã©ããäœæãããã³ã³ãããŒã©ãŒå ã§åŒã³åºãå¿ èŠããããŸãã åã ã®ãã€ã³ãã®1ã€ã¯ããã²ãŒã·ã§ã³ã§ãã ViewControllerã«è€æ°ã®åºå£ç¹ãããå Žåã¯ãããã²ãŒã·ã§ã³ãšããã²ãŒã·ã§ã³ã³ã³ãããŒã«ã«ã€ããŠæ€èšããå¿ èŠããããŸãã ã³ã³ãããŒã©ãŒã³ãŒãå šäœã«5ã10åã®åºå£ç¹ãæ£åšããŠããViewControllerã«é »ç¹ã«åºäŒããªããã°ãªããŸããã§ããã ããã²ãŒã·ã§ã³ã®äœæããåå¥ã®æ¡åŒµæ©èœãžã®ããã²ãŒã·ã§ã³ãã»ã°ãšã®ã¿ã«ããããã²ãŒã·ã§ã³ã®ç®¡çãåå¥ã®ã«ãŒã¿ãŒãšã³ãã£ãã£ã®äœæãUINavigationControllerããã®ç¶æ¿ãªã©ããããç·šæããæ¹æ³ã¯å€æ°ãããŸãã ãããããããè¡ãå¿ èŠããããŸãã ãããŠãã¹ãããŸãã èŠããŠããã¹ãäž»ãªããšã¯ãViewControllerã¯è¡ã®ãã¹ãŠã§ã¯ãªããå¿ èŠãªããšãå®è¡ããå¿ èŠããããšããããšã§ãã MVVMãVIPERã§äœ¿çšããããšã³ãã£ãã£ã«ã€ããŠãåãããšãèšããŸãïŒãªã¹ãã¯ããå°ãæ¬ç©ã§ãïŒã 圌ããããªããã°ãªããªãããšã¯ã圌ããããªããã°ãªããªãããšã ãããããView-ModelãªãããããŠãã¥ãŒã®ããŒã¿è¡šçŸã®ã¿ãããããšã³ãã£ãã£ãªãããããŠããŒã¿ã®ä¿åãšå€æãªã©ã§ãïŒè²¬ä»»ã®äŸã¯arbitraryæçã§ãããèè ã¯ãããã®ã¹ããŒãã¡ã³ãã®å®å šãªçå®ãè£ ã£ãŠããŸããïŒã æ¢åã®ã¯ã©ã¹ã«æ°ããã¡ãœãããŸãã¯ããããã£ãè¿œå ããåã«ããããæ¬åœã«ãã®ã¯ã©ã¹ã«ããã¹ããã©ãããåžžã«èããŠãã ããã
2. ã¢ãã«
iOSã§é »ç¹ã«èŠããããšã©ãŒã®1ã€ã¯ãã¢ãã«ã¬ãã«ã®åé¢ããªãããšã§ãã ç§ã®èŠ³ç¹ããããããŠå®éã«ã¢ããªã±ãŒã·ã§ã³ãæåãããåŸãã¢ãã«ãå¥ã ã®ãã¬ãŒã ã¯ãŒã¯ã«é 眮ããããšãæåã§ãã ãã¡ã€ã³ãåãåºãããšãã§ããŸãã ããšãã°ãããŒãããªããªãŒã¢ããªã±ãŒã·ã§ã³ãããå Žåã¯ãå¥ã®ãã¬ãŒã ã¯ãŒã¯ã«å ¥ããããšãã§ããŸããããšãã°ãã¬ã¹ãã©ã³ãšããã«é¢é£ãããã¹ãŠïŒã¬ã¹ãã©ã³ãã¡ãã¥ãŒãå Žæãªã©ã§æ€çŽ¢ïŒãæçãé éãšãªã¢ãªã©ã§ãã ãã±ãããè³Œå ¥ããããã®ã¢ããªã±ãŒã·ã§ã³ãããå ŽåãããŒã¹ã®farmework'ovãéžæã§ããŸãïŒãã±ãããäºçŽãè³Œå ¥ãå±¥æŽãªã©ãæ€çŽ¢ããŸãïŒã åãã¬ãŒã ã¯ãŒã¯ã¯ãåå¥ã®åäœãã¹ãã»ããã§ã«ããŒã§ããŸãã ããã¯ã§ããŸããããããã§ãã³ã³ãããŒã©ãŒãšã®çžäºäœçšããå®å šã«åé¢ãããã¢ãã«ãäœæããããšããŸãã
3. 倧èŠæš¡ãªãUIãViewController
巚倧ãªã¹ããŒãªãŒããŒãã«äœåºŠãåºäŒã£ãŠããïŒãŸãæ»ã£ãŠããŸãïŒã巚倧ãªUIViewControllersãåæ§ã§ãã 巚倧ãªã®ã¯ã³ãŒãã®éã§ã¯ãããŸãããïŒãããïŒãUIèŠçŽ ã®æ°ã®ç¹ã§ã¯ã ãã¹ãŠã®éçºè ã巚倧ãªå±±ç©ã¿ã®ViewControllerãèŠããšãã«èªåãã¹ãã ãšæã質åã¯ã次ã®ããã«èãããŸãã
ᅩ

ããã¯Wordã®ç©ºã®ããã¥ã¡ã³ãã®ã¹ã¯ãªãŒã³ã·ã§ããã§ããã1ã€ã®ViewControllerã§ãããšã¯æããŸããããå€ãã®iOSéçºè ã¯1ç»é¢-1 ViewControllerãã©ãã€ã ã«åŸããŸãã
å¥ã®ViewControllerã§ãŠãŒã¶ãŒã®è«çæäœãŸãã¯æ©èœãå®è¡ããç»é¢äžã®ããã€ãã®èŠçŽ ãéžæããŸãã äŸã¯ãã®ç»é¢ã§ãã

è¡šã®åã»ã«ã¯åå¥ã®VCã§ãã äœæè ã®ã¢ãã¿ãŒãäœæè ãããã³æéã®ã¿ã€ãã«ã¯ãåå¥ã®ViewControllerã§ãã ã³ã³ãã³ããšãªã³ã¯ãå¥åã®ViewControllerã§ãã
ããã-ã³ã¡ã³ã-å ±æ-ãããã®ã³ã³ããŒãã³ãã¯ãã¹ãŠå¥åã®ViewControllerã§ãã
4. ããããã®UIã³ãŒã
èšå€§ãªUIã³ãŒãã¯ãããŸããŸãªã³ã³ããŒãã³ãã®è¥æºã«ãã€ãªãããŸãã ãœãªã¥ãŒã·ã§ã³ã¯ãViewControllerå ã®ã«ã¹ã¿ãã€ãºã§ã¯ãªããUIã³ã³ããŒãã³ãã®ããã©ã«ãã®ç¶æ¿ã§ããå ŽåããããŸãã ãŸãã¯ãUIã説æããæ¡åŒµæ©èœãè¿œå ã§ããŸãã
5. 倧èŠæš¡ãªã¹ããŒãªãŒããŒãã
å€ãã®å Žåããããžã§ã¯ãã§å€§èŠæš¡ãªStoryboardãã¡ã€ã«ã«åºäŒããŸããã ããŸããŸãªè©³çŽ°ã¬ãã«ã®20ã50åã®ViewControllerãã¹ããŒãªãŒããŒãã«è¿œå ãããŸãã æåã¯ãã¹ãŠãã¹ã ãŒãºãã€äŸ¿å©ã«è¡ãããããã²ãŒã·ã§ã³å šäœãããã«ãããèšå®ãããã«ãããŸãããèŠä»¶ãå€æŽããããæ°ããéçºè ãæ¥ç¶ãããšããã«ãããã¯å®å šãªå°çã«ãªããŸãã 1ã€ã®è§£æ±ºçã¯ãXcode UI Builderããã®ãŸãŸäœ¿çšããªãããšã§ãã ã³ãŒãããã¬ã€ã¢ãŠãå šäœãäœæããŸãã
ããŸããŸãªã©ã€ãã©ãªã䜿çšããŠãå¶çŽïŒParusãMasonryãªã©ïŒã®èšè¿°ãç°¡çŽ åããããããŒãã³ã¢çšã«CGFrameã䜿çšããŠããã¹ãŠã®æ¹åãšèš±å¯ã«ã€ããŠãã¹ãŠãèªåã§èšè¿°ããŸãã Storyboardãæ¬åœã«äœ¿çšãããå Žåã¯ããããžã§ã¯ããããã€ãã«åå²ããæ¹æ³ãæ€èšããŠãã ããã çæ³çã«ã¯ãã¹ããŒãªãŒããŒãã«ã¯1ã€ã®è²¬ä»»ããŸãã¯1ã€ã®ãŠãŒã¹ã±ãŒã¹ãå¿ èŠã§ãã ã€ãŸã ããšãã°ãã¿ã¯ã·ãŒã®ã¢ããªã±ãŒã·ã§ã³ãããå Žåãåã ã®ã¹ããŒãªãŒããŒãã¯ãã¿ã¯ã·ãŒã®åŒã³åºããã¿ã¯ã·ãŒã®è¿œè·¡ãæ¯æããäžè¬æ å ±ãªã©ã«ãªããŸãã ã€ãŸã å€ããå°ãªããç¬ç«ããæ©èœã ã¹ããŒãªãŒããŒããªãã¡ã¬ã³ã¹ã䜿çšãããšãããã¯éåžžã«äŸ¿å©ã§ãããæå°éã®ã³ãŒãèšè¿°ãå¿ èŠã§ãã çæ³çã«ã¯ãã¹ããŒãªãŒããŒãã«ã¯3ã4å以äžã®åå¥ã®ç»é¢ãå«ããªãã§ãã ããã ã¹ããŒãªãŒããŒãã倧ãããªãã»ã©ãããããµããŒãããããã«ããå€ãã®åŽåãå¿ èŠã«ãªããæåã«ç解ããã®ãããé£ãããªããããŒãããã®ã«éåžžã«æéãããããéçºããŒã ã§äœæ¥ããã®ãããé£ãããªããŸãã
çµè«
ãã®æçš¿ã§èšãããã£ãããšã¯ãMVCãiOSéçºè ã®å€ãã®åé¡ãéé£ããåŸåãããããšã«æ°ã¥ããããšã§ãããããŠãå€ãã®å ŽåïŒäžèšã®äŸã§èŠãããããã«ïŒããããã®æéã¯iOSã«ç¹ã«éå®ãããŸãã å€ãã®å Žåãããã¯éçºè èªèº«ã®è²¬ä»»ã§ãããããã«ããããã®éçºè ã¯ä»ã®ã¢ãŒããã¯ãã£ã«åãæ¿ãããšãã«åããŸãã¯åæ§ã®åé¡ãçµéšããããšããããããŸãã 倧èŠæš¡ãªVCã¯ãMVCãã¹ã±ãŒãªã³ã°ã§ããªãããã§ã¯ãªããéçºè ãå¶éãæ£ããã¹ã±ãŒãªã³ã°ããããªã/èš±å¯ããªãããã«ã90ïŒ ã®ã±ãŒã¹ã§çºçããŸãã
VIPERãMVVMïŒããã³ãã®ä»ïŒã¯ãç¹ã«éçºããŒã ã§äœæ¥ããŠããå Žåã«ãããæ¯æŽã§ããŸããããã¹ãŠã®åé¡ã«å¯Ÿããäžèœè¬ã§ã¯ãããŸããã ãã®èšäºã§ã¯ãç§èªèº«ããããžã§ã¯ãã§VIPER / MVVMã䜿çšããŠããã«ãããããããMVCãéé£ããããæªéã®æè·è ãšããŠè¡åããç¶æ³ã®äžéšãåŒçšããããšããŸããã è¯ãã³ãŒããæžããŠãã ããã ãã¹ãŠããŒããŒã