ããããã誰ã«ãåãåäžã®ã¬ã·ãã¯ãããŸããã ããã¯ããããåé¡ã«é©çšãããŸãã éçºè
ã«ãšã£ãŠããã®è«æã¯èªæã§ãããåã
ã®ããŒã«ã®äœ¿çšãšèšèšãžã®é¢äžã¯äž»ã«ããæèã«ãã£ãŠæ±ºå®ãããŸãã èªè»¢è»ã®çºæã¯ããã³ããã¯ã§é¿ããããŸããã
ç¹ã«ãèªè»¢è»ã®çºæã¯ãã¢ããªã±ãŒã·ã§ã³ã®è€éãã®å¢å ãåŸã
ã«ãããæå³ã§ãã€ã®éã«ãçºçãããšãã«èµ·ãããŸãã è€éãªã¢ããªã±ãŒã·ã§ã³ã¯éåžžããªããã¢ããªã±ãŒã·ã§ã³ã§ããããã®èŠçŽ ãšæ©èœã¯W3C www.w3.org/TR/backplaneã§æå®ãããŠããŸãã æåãªJavaScriptãšãã³ãžã§ãªã¹ãã®Addy Osmaniã¯ãããã«è€éãªã¢ããªã±ãŒã·ã§ã³ãå®çŸ©ããŠããŸãïŒãç§ã®æèŠã§ã¯ã倧èŠæš¡ãªJavaScriptã¢ããªã±ãŒã·ã§ã³ã¯ããµããŒãã«å€å€§ãªéçºè
ã®åªåãå¿
èŠãšããéèŠãªã¢ããªã±ãŒã·ã§ã³ã§ãã com / largescalejavascript /ïŒã
ãã¹ã¯ãããã¢ããªã±ãŒã·ã§ã³ã®å Žåãéçºããã»ã¹ã確ç«ãããŠããããã§ãã ãããã¯ãŒã¯ã¢ããªã±ãŒã·ã§ã³ã®å Žåãäžè¬çãªã¹ããŒã ãæ確ã§ãã ããããããŒã¯ã¢ããèšèªãšäœ¿ããããã®éå
¬åŒã®æŠå¿µã§è¡šçŸããããŠã§ãã®æè¡çç¹åŸŽã¯ããªãããªã¢ããªã±ãŒã·ã§ã³ã®ç解ãšèª¬æãè€éã«ããŸãã ã¢ããªã±ãŒã·ã§ã³ã®ãããã¯ãŒã¯æ§ã®ç¹åŸŽããªã¢ã«ã¿ã€ã æ©èœã¯æè¡çèŠå ã«ãã£ãŠå¶éãããããŒã¿ãžã®å³æã¢ã¯ã»ã¹ã¯ãããŸããã ã¯ã©ã¹ã®ãã€ãã£ãæ§é ãæããªãJavaScriptãªããžã§ã¯ãèšèªã®æ©èœã ããã©ãŒãã³ã¹ãšæ©èœã«åœ±é¿ããããŸããŸãªç°å¢ïŒã€ãŸãããã©ãŠã¶ãŒïŒã§ã®å±éãšå®è¡ã®ç¹æ®æ§ã¯ãæããã«ãããã®ãã¹ãŠã®èŠå ããã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã®èœåã決å®ãããã®èšèšã®äžè¬çãªèšèšïŒpathosã®ããïŒãéçºããããšãåæã«åŠšããŠããããã§ã
ããšããããããã§ãã£ãŠããç§ã¯ãããããã»ã©äžè¬çã«èŠãªãã 代ããã«ãããã€ãã®ç°ãªãæŠå¿µãç解ããŠããŸãã 1ã€ç®ã¯ãæåãªMVCïŒModel View ControllerïŒèšèšã¹ããŒã ã§ãã 2çªç®ã¯ãNicholas Zakasããã®è«ççãªã³ãŒãåé¢ã®æŠå¿µã§ãïŒYahooã«ã³ãã¡ã¬ã³ã¹www.youtube.com/watch?v=vXjVFPosQHwã§è©±ããŠããŸãïŒã
3ã€ç®ã¯ãããŒã¿ãæ··åšããã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ãšããŸããŸãªæ©èœã§åäœããã³ãŒããäœæããããã®åçŽãªã¢ãããŒãã§ãïŒæ··åšãããšæ²åçã«ããã¹ã¿ããçºçããå ŽåããããŸãïŒã
ããã«ããããã®ã¢ãããŒãã«ãããã³ãŒãã®ç·šæãšæ©èœã®ç·šæãšã¯äœã§ããããšããåé¡ãããªã现ããèšããŸãã
MVCã¹ããŒã ïŒModel Representation ControllerïŒã¯ãããã€ãã®æåããJavaScriptå®è£
ãèŠã€ããŸãããbackbone.jsãJavaScriptMVCã ã¹ããŒã ã«ã€ããŠç°¡åã«èª¬æããŸãã ã¢ãã«ã®æ§é ãšéå±€ã«ã¯ããŒã¿ãå«ãŸããŠããããã¥ãŒã«ã¯ããŠãŒã¶ãŒã«éä¿¡ããããã®ããŒã¿ã®ããŒãžã§ã³ã衚瀺ãããŸãã ã¢ãã«ãšãã¥ãŒã®éã«ã¯çŽæ¥çãªæ¥ç¶ã¯ãããŸãããããã¯ãã³ã³ãããŒã©ãŒãšãã圢ã®äžéäœãååšããããã§ããã€ãã³ãã管çããè€æ°ã®ãã¥ãŒã管çããããå¶åŸ¡ãå¥ã®MVCã¢ãžã¥ãŒã«ïŒéå±€MVCã¹ããŒã ïŒã«è»¢éãããã§ããŸãã
ã³ã³ãããŒã©ãŒã®å¶åŸ¡æ©èœã¯ããããã«ç°ãªãã¢ãã«MVPïŒã¢ãã«ãã¥ãŒãã¬ãŒã³ã¿ãŒïŒãå°ãã次ã«MVVMïŒã¢ãã«ãã¥ãŒViewModelïŒãå°ããŸããã MVVMã¯ãã¢ãã«åŽãšãã¥ãŒåŽã®äž¡æ¹ã®ã€ãã³ãäžã«ããŒã¿ãåæããView-ModelïŒãŸãã¯å¿
èŠã«å¿ããŠVisible ModelïŒã®åœ¢åŒã§ãã¢ãã«ãšãã¥ãŒéã®ããç·å¯ãªæ¥ç¶ã«ãã£ãŠåºå¥ãããŸãã
MVVMã¯ãSilverlightã«ã€ããŠèª¬æãããŠãããã¢ããªã±ãŒã·ã§ã³ããžãã¯ãšã¯ç°ãªãç¹å®ã®ããžãã¯ãæã€è€éãªã€ã³ã¿ãŒãã§ã€ã¹ã«å©ç¹ããããŸãïŒããšãã°ããªããžã§ã¯ããã¢ãã«ã«è¿œå ãããšãã¢ããªã±ãŒã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ã倧ããå€ãããŸãïŒã HTMLã®å ŽåãMVVMã¹ããŒã ã¯DOMã®ãããã§ç¹ã«æåããŠããŸããDOMã«ã¯ããåãã®ãšãããããŒã¿ãå«ãŸããŠããå ŽåããããŸãã ãããã£ãŠãMVVMã¯knockout.jsãã¬ãŒã ã¯ãŒã¯ã«æ£åžžã«å®è£
ãããŸããã æåã¯ããã¹ãŠãç°¡åã§ãã ãµãŒããŒã«ãã£ãŠæäŸãããããŒã¿ã¢ãã«ããããŸãã DOMã®åœ¢åŒã§ãããŒã¯ã¢ããã®åœ¢åŒã§è¡šçŸããããŸãã ãŸããè¡šçŸã®å€æŽã説æããã¢ãã«ãšãã¬ãŒã³ããŒã·ã§ã³ãæ¥ç¶ãããã®æ¥ç¶ãåæããRepresentation-ModelããããŸãã
MVCã¯ãã¢ããªã±ãŒã·ã§ã³ã®3ã€ã®ã¬ãã«ã®åé¢ãšããŠåã«è§£éã§ãããããã®éã®é¢ä¿ãèŠå¶ã§ããªãããšã«æ³šæããŠãã ããã ãã®ãããå€ãã®å Žåãã¢ãã«ãšãã¥ãŒãç¢å°ã§æ¥ç¶ãããŠããå³ããããŸããããã®æ¹æ³ã§ã¯ãç°ãªããã¥ãŒãšã³ã³ãããŒã©ãŒã®éå±€ã䜿çšããå Žåã«æçšãªã¹ã±ãŒã©ããªãã£ããããã£ã倱ãããããšã¯æããã§ãã ããã«ã€ããŠã®è©³çŽ°ã¯ãiOSçšã¢ããªã±ãŒã·ã§ã³éçºã«é¢ããæåã®Paul Hegartyè¬çŸ©www.stanford.edu/class/cs193p/cgi-bin/drupal/node/259ã§éåžžã«æ確ã«è¿°ã¹ãããŠããŸãã
Nicolas Zakasã¯åœŒã®éçºææ¡ãçºè¡šããŸããïŒãã¿ãŒã³ã®èšèªãžã®åœ¢åŒåã¯Addy Osmani addyosmani.com/largescalejavascriptã®èšäºã«ãããŸãïŒã å®éã圌ã¯äžè¬çãªã¢ãã«ãšããžãã¯ããéãããåå²çµ±æ²»ãã¢ã«ãŽãªãºã ã䜿çšããããšã«æ±ºããŸãããã¢ããªã±ãŒã·ã§ã³èŠçŽ ã¯ã€ã³ã¿ãŒãã§ãŒã¹ãããã¯ã§è£
食ããããããããç¬èªã®ã¢ãžã¥ãŒã«ã§å®è£
ãããŸãã ãããã®ã¢ãžã¥ãŒã«ã¯çžäºã«äº€æããŸããã 圌ãã¯ãå®è¡ããããµã³ãããã¯ã¹ã«ã€ããŠã®ã¿ç¥ã£ãŠããŸãã ãµã³ãããã¯ã¹ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã³ã¢ãåŠçããããã»ã¹ãèµ·åããŠäžé£ã®ã¢ã¯ã·ã§ã³ãç£èŠããŸãã ã³ã¢èªäœã¯ãã§ãŒã³ã®æåŸã§ã¯ãããŸããïŒåŒã³åºãïŒã以äžã«ãjQueryãªã©ã®ç°å¢ã§ã®æè¡çãªäœæ¥ã®ããã®æšæºã©ã€ãã©ãªãšãã©ã°ã€ã³ããããŸãã ã¢ãžã¥ã©ãŒã¢ããªã±ãŒã·ã§ã³ã®å ŽåãAMDã¢ãžã¥ãŒã«ä»æ§ä»æ§ïŒããã³ä»£æ¿CJSïŒãäœæãããŸããã
åããåé¢ãã¢ãããŒãã«ãã3çªç®ã®ãªãã·ã§ã³ãææ¡ãããŠãã ããã ãªããžã§ã¯ããïŒåºçŸ©ã«ã¯ïŒã¢ã¯ã¿ãŒãæ©èœãããã³ã¹ã¯ãªããã«åºå¥ããŸãã ã¢ã¯ã¿ãŒã¯ãã°ã©ãã£ã«ã«ãªè§£éã«ãããã¢ããªã±ãŒã·ã§ã³ã®äžéšã§ãã ãããããŠã£ãžã§ãããšåŒã¶ããšã¯å±éºã§ãã ã¢ã¯ã¿ãŒã«ã¯èªèº«ã«é¢ããæ
å ±ãããããã®äžã«ããŒã¿ãé
眮ãããŸãã æ©èœã¯ãé¡äŒŒã®ãŠã£ãžã§ããã®å¯èœãªå€æã®ãªã¹ãã§ãããåæ©èœã¯ã¢ã¯ã¿ãŒã«ã¢ã¿ããã§ããŸãã ãããã®æ©èœã®åŒã³åºãã¯ã¹ã¯ãªããå
ã§çºçããŸãã ã¹ã¯ãªããã¯ã¢ã¯ã¿ãŒã«äŸåããå Žåããããåæåããå ŽåããããŸãã åã«é£ç¶ããé¢æ°åŒã³åºãããªã¹ãããŸãã ã¿ã¹ã¯ã®è€éåã®å¯èœæ§ãããã¹ã±ãŒãªã³ã°ã®èŠ³ç¹ããããããæé©ãªæ¹æ³ã§ã¯ãªãããšã¯æããã§ãã ïŒããããç§ã®æèŠã§ã¯ãããã¯èªè»¢è»ãäœæããæãæçœãªæ¹æ³ã§ããïŒ
ã¹ã±ãŒã©ããªãã£ãéæãããå Žæ
Zakasèªèº«ã説æããããã«ã圌ã®å€§èŠæš¡ã¢ããªã±ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ã®å€§ããªå©ç¹ã¯ãjQueryãªã©ã®æšæºã©ã€ãã©ãªãæ§ç¯ããåé¡ãªãããããå€æŽããApplication Coreã®ã¬ãã«ããããã«ä¿®æ£ã§ããããšã§ãã ã¢ãžã¥ãŒã«ãè¿œå ããŠãªãã«ããã®ã¯ç°¡åã§ãã
MVVMã¢ãã«ã§ã¯ãéåžžã«å³æ ŒãªãåçŽããèŠãããŸããã€ã³ã¿ãŒãã§ã€ã¹ãå€æŽãããšã3ã€ã®ã³ã³ããŒãã³ããã¹ãŠãèšè¿°ããå¿
èŠããããŸãã ãã ããæ¢ã«èª¬æããèŠçŽ ã¯åé¡ãªãå€æŽã§ããŸãã åæã«ãã€ã³ã¿ãŒãã§ã€ã¹ã°ã©ãã£ãã¯ã¹ã®å®å
šãªåæç»ããã®ããžãã¯ã«åœ±é¿ãäžããªãå Žåãæãã¹ã±ãŒã©ãã«ã§æãæè»ãªéšåã¯ãã¬ãŒã³ããŒã·ã§ã³ã¬ãã«ã§ãã
çŽ æŽãªã¢ãããŒãã§ã¯ãå®è£
ã®3ã€ã®ãªããžã§ã¯ããã¹ãŠã®å¿
é èšè¿°ãå®çŸ©ããå³ãããã³ãã«ããããŸãã ããããæãæè»ãªéšåã¯ãéåžžã«ç°¡åã«å€æŽã§ããã·ããªãªã®ã¬ãã«ã®ããã§ãã
ã¡ã€ã³ããžãã¯ã¯ã©ãã«èŠå®ãããŠããŸãã
[ã³ã¡ã³ããŒã¿ãŒã®ãããã§ããã®ãããã¯ã®å€§éšåã¯ä¿®æ£ãããŸããïŒ]
Zakasã¢ãã«ã§ã¯ãããžãã¹ããžãã¯ãšUIã¯ã¢ãžã¥ãŒã«ã«å®è£
ãããŸãã
MVCã§ã¯ãããžãã¯ã¯ã¢ãã«ã«é
ç·ãããã³ã³ãããŒã©ãŒã«é
眮ããããšãã§ããŸãããæ¹å€ãããã ãã§ãïŒãœãŒã¹ãåç
§ïŒã 察ç
§çã«ãMVVMã§ã¯ãããžãã¯ã¯ViewModelã®ãäžéãã¬ã€ã€ãŒã«é
眮ãããŸãã
åçŽãªã¢ãããŒãã§ã¯ãããžãã¯ã¯ã·ããªãªã«åå²ãããUIã¯ããªããã£ããªæ©èœã«åå²ãããŸãã
å€ãã®ãŠãŒãã£ãªãã£ã³ãŒãããã¬ãŒã ã¯ãŒã¯ã®çè«çãªããªã¥ãŒã ã®æšå®å€ã¯ãããŸãã
Zakasã¢ãã«ã§ã¯ããã¬ãŒã ã¯ãŒã¯ã¯ã¢ãžã¥ãŒã«ãšãµã³ãããã¯ã¹ïŒãç°å¢ã§ã®èµ·åãïŒã®ãµãŒãã¹æ¥ç¶ãããã³ã¢ã¯ã·ã§ã³ã®äž»èŠãªã¿ã€ããèšè¿°ããã«ãŒãã«ãèšè¿°ããŸãã
MVCã¯ãã¢ãã«ãšãã¥ãŒã®ã¡ã€ã³ã¯ã©ã¹ã®èª¬æãåæãšããŠããŸãã ã³ã³ãããŒã©ãŒã®äžéšã®æ©èœããã¬ãŒã ã¯ãŒã¯ã«å®è£
ããå¿
èŠããããŸãïŒMVVMã¢ãã«ã®åæãªã©ïŒã
çŽ æŽãªã¢ãããŒãã«ã¯ãã¢ã¯ã¿ãŒãšãããã«ä»å ãããæ©èœã®ãã¢ã»ã³ããªãã®å®è£
ãå«ããå¿
èŠããããŸãã
éšåã®ãã¹ãã®ãããã
ã¢ãžã¥ãŒã«æ¹åŒã¯ããã¹ãã·ããªãªãå®å
šã«èªèããŸããåè·¯ã®åéšåã¯åå¥ã«ãã¹ãã§ããåã¢ãžã¥ãŒã«ãåæ§ã«ãã¹ãã§ããŸãã
MVCã¯ãã³ã³ãããŒã©ãŒãšã®çžäºäœçšã®ã¬ãã«ã«ãã£ãŠãéšåçã«ããã¹ãããããšãã§ããŸãããããã¯ããªã¥ãŒã ã®èŠ³ç¹ããã¯ãããé£ããããã¹ãã§ãã
çŽ æŽãªã¢ãããŒãã¯ãåã
ã®ãŠã£ãžã§ããã®æ©èœããã¹ãããããã«é©åãããŠããŸãã ã¹ã¯ãªããã®ãã¹ãã¯ããã¹ãã®åå²ããã³ãããŸããªåæç¶æ
ã«ãããããè€éã«ãªãå¯èœæ§ããããŸãã
ã³ãŒãã¯æ¬åœã«åå©çšå¯èœã§ãã
ã¢ãžã¥ãŒã«æ¹åŒã®ã¢ãããŒãã«ãããå®å
šã«ã¹ã±ãŒã©ãã«ãªã¢ãžã¥ãŒã«ãœãªã¥ãŒã·ã§ã³ãäœæãããŸãïŒããã«ãã¢ããªã±ãŒã·ã§ã³ã ãã§ãªãã€ã³ã¿ãŒãããå
šäœã§AMDã䜿çšããå ŽåïŒã ãã®åŸãã³ãŒããå¥ã®ãããžã§ã¯ãã®äžéšãšããŠå¥ã®ã¡ã€ã³ã©ã€ãã©ãªïŒYUIãªã©ïŒã«éšåçã«é©çšã§ããŸãã
MVCã¯ããã¬ãŒã³ããŒã·ã§ã³ã®ã¬ãã«ãå€æŽããã³çœ®æããå Žåã«ããã®ã¿ã¹ã¯å
ã§ã®ã¿ã¹ã±ãŒãªã³ã°ã§ããŸãã
çŽ æŽãªã¢ãããŒãã¯ãããŸããŸãªã¢ã¯ã¿ãŒã§åå©çšã§ããåå¥ã®æ©èœãäœæããŸãã ã¢ã¯ã¿ãŒã®éå±€ãæ§ç¯ã§ããŸãã ã·ããªãªã¯ã1åéããã§ãã
ãã®è¡šé¢çãªåæãæ·±ããããšæããŸãã ééã£ãŠåæ ããç¹ã¯äœã§ããïŒ ã©ã®ã¡ãœããããã詳现ãªèª¬æãæã£ãŠããŸããïŒ ãã¹ãŠã®ã³ã¡ã³ããŒã¿ãŒã«ãMVCãMVVMãããã³ã¢ãžã¥ãŒã«æ¹åŒã®ã¢ãããŒãã§ã®çµéšãå
±æãããããé¡ãããŸãïŒ
UPD
mark_ablovã¯ãMVCã¢ãããŒããšã¢ãžã¥ãŒã«æ§ã¢ãããŒãã®éã®ç§ã«ã¯æããã§ãªãæ¥ç¶ãææ¡ããŸãããç¹ã«ãMVCåè·¯ã«ã¢ãžã¥ãŒã«ãå®è£
ã§ããŸãã åèšããã®ãããªå³ãååŸã§ããŸãã
ãœãŒã¹
habrahabr.ru/blogs/webdev/117791
blog.rebeccamurphey.com/code-org-take-2-structuring-javascript-applic
addyosmani.com/largescalejavascript
nirajrules.wordpress.com/2009/07/18/mvc-vs-mvp-vs-mvvm
www.w3.org/TR/backplane
Alex WebCawãJavaScript Webã¢ããªã±ãŒã·ã§ã³ã ã¯ã©ã€ã¢ã³ããžã®ç¶æ
ã®ç§»åã«é¢ããjQueryéçºè
ã¬ã€ãã2011幎
www.youtube.com/watch?v=vXjVFPosQHw ïŒãããªïŒ
www.intuit.ru/department/internet/aspnetmvcframe/1 ïŒãããªïŒ
www.stanford.edu/class/cs193p/cgi-bin/drupal/node/259ïŒiTunes ããããªïŒ
blog.astrumfutura.com/2008/12/the-m-in-mvc-why-models-are-misunderstood-and-appreciatedïŒPHP ãã·ãã¯ã³ã³ãããŒã©ãŒã®æ¹å€ïŒ
martinfowler.com/eaaDev/uiArchs.html