ç®ç
Webã¯ã©ã€ã¢ã³ããšWebã¢ããªã±ãŒã·ã§ã³éã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®å¯Ÿè©±ããæ確ã«å®çŸ©ããã3ã€ã®åœ¹å²ã«åå²ããŸãã
èæ¯
MVCãšããçšèªã¯ãç¹ã«Webã®ã³ã³ããã¹ãã§ãå
ã®æå³ã®
ã»ãã³ãã£ãã¯ãŒãããçºçããŸãïŒãã®åé¡ã®è©³çŽ°ã«ã€ããŠã¯ã
Stefan Pribshã®
ãããªãåç
§ããŠãã ããïŒã ãã®äžé®®æãã解æ¶ããæ段ãšããŠãWebåºæã®ã¿ã¹ã¯ã解決ããããã®MVCã³ã³ã»ããã®æ¹è¯çã§ãã
Action-Domain-Responderãã¿ãŒã³ã®èª¬æã«æ³šç®ããŸãã
ADRã¯ãæ¥ã
ã®Webéçºããã»ã¹ã§å®éã«å®è£
ãããã®ã«æ²¿ã£ãŠãã¯ããã«åªããŠãããšæããŸãã ããšãã°ããã®ãã¿ãŒã³ã®äœæã¯ãã«ãŒãã£ã³ã°ãšã¹ã±ãžã¥ãŒãªã³ã°ã®åé¡ã解決ããæ¹æ³ã«éšåçã«è§ŠçºãããŸãããããã¯ãäžè¬çãªå Žåãã«ãŒãã£ã³ã°ãšã¹ã±ãžã¥ãŒãªã³ã°ã®éã«ãã³ã³ãããŒã©ãŒã¯ã©ã¹èªäœã§ã¯
ãªã ããã®ã³ã³ãããŒã©ãŒã¯ã©ã¹ã®ç¹å®ã®ã¢ã¯ã·ã§ã³ã¡ãœãããåç
§ããŠããããã§ãã
ãã1ã€ã®åé¡ã¯ã
Viewããã³ãã¬ãŒããšããŠããèŠãŠãããšããäºå®ã§ãããã ããWebã®ã³ã³ããã¹ãã§ã¯ã
Viewã¯HTTPå¿çã§ãããšèšãæ¹ãããããé©åã§ãããã åè¿°ã«åºã¥ããŠãADRã¯MVCãããWebã¢ããªã±ãŒã·ã§ã³ã®æŠå¿µãããé©åã«åé¢ã§ãããšèããŠããŸãã
ã³ã³ããŒãã³ã
ã¢ã¯ã·ã§ã³ã¯ã
ãã¡ã€ã³ãš
ã¬ã¹ãã³ããŒãæ¥ç¶ããããžãã¯ã§ãã å
¥åããŒã¿ã䜿çšããŠ
Domainãšããåããã
Domainã®åºåã
Respondentã«æž¡ããŸãã
ãã¡ã€ã³ã«ã¯ãã»ãã·ã§ã³ãã¢ããªã±ãŒã·ã§ã³ããã³ç°å¢ããŒã¿ã管çããç¶æ
ãå€æŽããå¿
èŠã«å¿ããŠããŒã¿ã管çããããã®ããžãã¯ãå«ãŸããŠããŸãã
ã¬ã¹ãã³ããŒã¯ãHTTPå¿çãŸãã¯å¿çã®èª¬æãäœæããããã«å¿
èŠãªããžãã¯ã§ãã åºæ¬ã³ã³ãã³ãïŒæ¬æã³ã³ãã³ãïŒããã³ãã¬ãŒããšãã¬ãŒã³ããŒã·ã§ã³ãããããŒãCookieãã¹ããŒã¿ã¹ã³ãŒããªã©ã§åäœããŸãã
çžäºäœçš
- Webãã³ãã©ãŒã¯ã¯ã©ã€ã¢ã³ããããªã¯ãšã¹ããåãåãããããActionã«æž¡ããŸãã
- ã¢ã¯ã·ã§ã³ã¯DomainãšçžäºäœçšããŸãã
- ãã®ã¢ã¯ã·ã§ã³ã¯ãããŒã¿ãåçè
ã«è»¢éããŸãïŒãã®ããŒã¿ã«ã¯ã ãã¡ã€ã³ãšã®ããåãã®çµæãã¯ã©ã€ã¢ã³ãèŠæ±ããã®ããŒã¿ãªã©ãå«ãŸããå ŽåããããŸãïŒ
- ã¬ã¹ãã³ããŒã¯ã Actionããåä¿¡ããããŒã¿ã䜿çšããŠå¿çãçæããŸãã
- Webãã³ãã©ãŒã¯ãã¯ã©ã€ã¢ã³ãã«å¿çãéä¿¡ããŸãã
MVCïŒModel-View-ControllerïŒãšã®æ¯èŒ
Webå
ã®çžäºäœçšãèšè¿°ããæãäžè¬çãªãã¿ãŒã³ã¯
Model-View-Controllerã§ãã
Action-Domain-Responderã¯æ¬åœã«åœè£
ããã
Model-View-Controllerã§ããïŒ ADRèŠçŽ ãMVCèŠçŽ ã«éåžžã«æ確ã«åæ ãããŠããããšã«æ°ä»ããããããŸããã
Model <--> Domain View <--> Responder Controller <--> Action
2ã€ã®ãã¿ãŒã³ã¯éåžžã«ãã䌌ãŠããŸãã éãã¯äœã§ããïŒ
äžè¬ã«ããã¡ãŠã©ãŒã®ãšãã»ã€ã
GUIã¢ãŒããã¯ã㣠ã[翻蚳]ããããè€æ°ã®ãã¥ãŒãš1ã€ã®ã³ã³ãããŒã©ãŒããããããŒãžäžã®åãããã¯ãåã³ã³ãããŒã«ãããŒãžå
šäœãšããŠãã ããã¯ãWebã¢ããªã±ãŒã·ã§ã³ã§MVCãé©çšãããšãã«çºçããã»ãã³ãã£ãã¯ãã©ãŒã®äž»èŠãªèŠçŽ ã§ãã
ãããŠãMVCãšADRã®åã
ã®ã³ã³ããŒãã³ããããã«è©³ããæ¯èŒããŸãããã
ã¢ãã«ãšãã¡ã€ã³
ADRã§ã¯ã
Responderã
ãã¡ã€ã³ãšéèŠãªæ¹æ³
ã§çžäºäœçšããªãããšãé€ããŠããããã«æ ¹æ¬çãªéãã¯ãããŸããã
ã¬ã¹ãã³ããŒã¯ã
ãã¡ã€ã³ãªããžã§ã¯ãããšã³ãã£ãã£ããã³ã³ã¬ã¯ã·ã§ã³ãšããŠäœ¿çšã§ããŸããã衚瀺ç®çã®ã¿ã§ãã
ã¬ã¹ãã³ããŒã¯ãMVCã®ãã¬ãŒã ã¯ãŒã¯ã§èŠå®ãããŠããããã«ã
ãã¡ã€ã³ãå€æŽãããæ
å ±ãéä¿¡ããŸããã
ã³ã³ãããŒã©ãŒãšã¢ã¯ã·ã§ã³
äžè¬çãªå ŽåãMVCã®ååã«åŸã£ãŠèšèšãããã·ã¹ãã ã®
ã³ã³ãããŒã©ãŒã®ã»ãšãã©ã®ã¯ã©ã¹ã«ã¯ãç¹å®ã®ã¢ã¯ã·ã§ã³ã«å¯Ÿå¿ããã¡ãœãããããã€ãå«ãŸããŠããŸãã ãããã®ãã¹ãŠã®ã¡ãœããã¯1ã€ã®
Controllerã«ååšããããããããã®åã¡ãœããã§åäœããè¿œå ã®ãã©ããã³ã°ãããžãã¯ãè¿œå ãããŸãïŒããšãã°ãã¢ã¯ã·ã§ã³èªäœã®çŽåãŸãã¯çŽåŸã«èµ·åããããã¯ïŒã ãã®ã«ãŒã«ã®éèŠãªäŸå€ã¯ãã€ã¯ããã¬ãŒã ã§ãããå
ã³ã³ãããŒã©ãŒã¯åå¥ã®ã¯ããŒãžã£ãŒãŸãã¯åŒã³åºããããªããžã§ã¯ãã§ããã
ã¢ã¯ã·ã§ã³ ïŒäŸïŒ
Slim ïŒãšããäžè²«ããŠããŸãã
ADRã®ãã¬ãŒã ã¯ãŒã¯å
ã§ã¯ã
ã¢ã¯ã·ã§ã³ã¯åå¥ã®ã¯ã©ã¹ãŸãã¯ã¯ããŒãžã£ãŒãšèŠãªãããŸãã ã€ãŸããå
ã¢ã¯ã·ã§ã³ã¯ãç¬èªã®åå¥ã®ã¯ã©ã¹ãŸãã¯ã¯ããŒãžã£ãŒã«é
眮ããå¿
èŠããããŸãã
ãã®ã¢ã¯ã·ã§ã³ã¯ã
ã³ã³ãããŒã©ãŒã
ã¢ãã«ãšããåãããã®ãšåãååã«åŸã£ãŠ
ãã¡ã€ã³ãšããåãã
ãŸããã
ãã¥ãŒãŸãã¯ãã³ãã¬ãŒãã·ã¹ãã ãšã¯ããåãããŸããã
ã¢ã¯ã·ã§ã³ã¯ãåã«ããŒã¿ã
å¿çè
ã«éä¿¡ãããããåå¥ã«ç Žæ£ããããã«æäŸããŸãã
è¡šçŸãšåçè
MVCã·ã¹ãã ã§ã¯ãéåžžã
Controllerã¡ãœããã¯
ãã¥ãŒã䜿çšããŠïŒããšãã°ã
ãã³ãã¬ãŒããã¥ãŒãŸãã¯
2ã¹ããããã¥ãŒã䜿çšããŠïŒå¿çæ¬æãçæã
ãŸã ã 次ã«ã
ã³ã³ãããŒã©ãŒã¯ãçæãããå¿çæ¬äœãå¿çèªäœã«çµ±åããŸãã ã¢ã¯ã·ã§ã³ã§ãã
Controllerã¡ãœããã¯ãå¿çãçŽæ¥å¶åŸ¡ããŠå¿
èŠãªããããŒãèšå®ããŸãã
ã³ã³ãããŒã©ãŒã®äžéšã®ã¡ãœããã¯ãåãããŒã¿ã«å¯ŸããŠç°ãªãå¿ç圢åŒãæäŸã§ããå ŽåããããŸãã ã»ãšãã©ã®å Žåããã®å€åã¯çµ¶å¯Ÿã«ãã¹ãŠã®ã¡ãœããã§ãµããŒããããŠããªããããããŒã¿è¡šç€ºã®ããžãã¯ã¯ã¡ãœããããšã«äœããã®æ¹æ³ã§å€åããããããã®å Žåã«ç¬èªã®æ¡ä»¶ããããŸãã
ADRã§ã¯ãå
ã¢ã¯ã·ã§ã³ã«å¯Ÿå¿ãã
ResponderããããŸãã
ã¢ã¯ã·ã§ã³ã¯ã
ãã¡ã€ã³ãšã®å¯Ÿè©±ã
å®äºãããšãå¿
èŠãªãã¹ãŠã®ããŒã¿ãšãã®ããŒã¿ã®å¶åŸ¡ã®äž¡æ¹ã
ãã¡ã€ã³ãã åçè
ã«è»¢éããŸãã
ã¬ã¹ãã³ããŒã¯ãããããŒã®èšå®ãã³ã³ãã³ãã¿ã€ãã®éžæããã³ãã¬ãŒãã®ã¬ã³ããªã³ã°ãªã©ãå®å
šã«å¶åŸ¡ããŸãã
Responderã«ã¯ã
ãã³ãã¬ãŒããšã³ãžã³ ã
ããŒã¹ããããã³ãã¬ãŒããšã³ãžã³ ã
ãã©ã³ã¹ãã©ãŒã ãã¥ãŒããŸãã¯ãã®ä»ã®ãã¬ãŒã³ããŒã·ã§ã³ã·ã¹ãã ãå«ãŸããããšããããŸãã ãŸããäžè¬çãª
Responderã¯è€æ°ã®
Actionã§äœ¿çšã§ããããšã«æ³šæããŠãã ããã äž»ãªããšã¯ã
ã¢ã¯ã·ã§ã³ãããããŒãšã³ã³ãã³ãã«é¢ãããã¹ãŠã®äœæ¥ã
Respondentã«å§ããããšã§ãããåã
ã®
Submissionã«å¯ŸããŠç¬èªã®
Responderãäœæããããã«å¿
èŠãªããšã§ã¯ãããŸããã
ä»ã®ãã¿ãŒã³ãšã®æ¯èŒ
MVCã³ã³ã»ãããæ¹è¯ã眮æããŸãã¯è£å®ãããã®ãšèŠãªãããä»ã®ãã¿ãŒã³ããããŸãã
Derek Greerã«ãããã¿ãŒã³ã®ãã®ã¬ãã¥ãŒã確èªã§ã
ãŸã ã
EBIïŒãšã³ãã£ãã£å¢çã€ã³ã¿ã©ã¯ã¿ãŒïŒ
EBIçšèªã«ã¯ãããŒããšã¢ããã¿ãŒãå
è§åœ¢ã¢ãŒããã¯ãã£ã
ECB ïŒEntity-Control-BoundaryïŒãšããå矩èªãããã€ããããŸãã Robert Martinã®
Clean Architectureã®äžéšãšããŠèª¬æãããŠããŸãã
EBIã¯MVCã®éšåçãªä»£æ¿æ段ã§ããã
Interactorããã³
Entityãªããžã§ã¯ãã«ãã£ãŠè¡šãããåºæ¬çãªèŠçŽ ãšåäœãã
Boundaryã䜿çšããŠçä¿¡ããŒã¿ãšçºä¿¡ããŒã¿ããåé¢ãããŸãã ãã®ã¢ãããŒãã®äž»ãªçµæã¯ãã¢ããªã±ãŒã·ã§ã³èªäœãšå
¥åããã³åºåã¡ã«ããºã ã®è€éããšã®æ確ãªåºå¥ã§ãããã®ãããããŒã®åäœã¯ãèŠæ±ã®åä¿¡ãŸãã¯å¿çã®éä¿¡ã«ã€ããŠç¹å®ã®ã·ã¹ãã ã«äŸåããŸããã
ç§ã¯èªããŸããç§ã¯EBIã®æŠå¿µã«ããŸã粟éããŠããªãã®ã§ããã®èª¬æã¯äžè¬çãŸãã¯ç¹å®çã«å®å
šã«æ£ãããšã¯éããŸããã ãã®åéã§ã®äžå®å
šãªç 究ã®åŸãEBIã¢ãŒããã¯ãã£ã¯ããããMVCãããã¢ããªã±ãŒã·ã§ã³å
ã®çžäºäœçšã説æããŠãããšããçµè«ã«éããŸããã äžèšã®èª¬æãæ£ããå ŽåãADRã¯EBIæ§é ã«ããªãé©åããŠããŸãã
- ADRã®ã¢ã¯ã·ã§ã³ãšã¬ã¹ãã³ããŒã¯Webåºæã®ãªããã¿ãŒãšããŠæ©èœããŸã
- ADR ãã¡ã€ã³ã¯ãADR ã¢ã¯ã·ã§ã³ããEBI ãšã³ãã£ãã£ã®èŠçŽ ãã«ãã»ã«åãŸãã¯é衚瀺ã«ããInteractorã®é¡äŒŒäœãšããŠæ©èœã§ããŸãã
ãããã¯ãããŒãããã³ã¢ããã¿ãŒã®çšèªãŸãã¯å
è§åœ¢ã®ã¢ãŒããã¯ãã£ãŒã®èŠ³ç¹ããã
ã¢ã¯ã·ã§ã³ããããŒãããšèŠãªãæ¹ãåççã§ããå ŽåããããŸããããã¯ãABI
ãã¡ã€ã³ã®äžéšãšããŠEBI InvokeãåŒã³åºãããããŒãã§ãã æåŸã«ã
ã¬ã¹ãã³ããŒã¯ãã¢ããªã±ãŒã·ã§ã³ãããŒã¿ãã¯ã©ã€ã¢ã³ãã«è¿ããã¢ããã¿ãŒããšèããããšãã§ããŸãã
ãã ããADRã¯EBIãçŽæ¥çœ®ãæãããã®ã§ã¯ãªãããã§ãã ãããã2ã€ã®ã¢ãããŒãã¯äºãã«è£å®ããŸãã
DCIïŒããŒã¿ã³ã³ããã¹ãçžäºäœçšïŒ
DCIã¯MVCãžã®è¿œå ãšããŠèª¬æãããŠãã ã代æ¿ã§ã¯ãããŸããã åçšåºŠã«ADRãµããªã¡ã³ããšåŒã¶ã®ã¯å
¬å¹³ã ãšæããŸãã
MVPïŒã¢ãã«ãã¥ãŒãã¬ãŒã³ã¿ãŒïŒ
MVPã¯ã Supervising Controllerããã³
Passive Viewãã¿ãŒã³
ã«ãã£ãŠå»æ¢ãããŸãã ã äžèŠãããšãç¹ã«
ããã·ããã¥ãŒãš
ã¢ãã«ãçžäºã«äŸåé¢ä¿ããªããšããç¹ã§ãADRãšéåžžã«ãã䌌ãŠããŸãã ãã¡ãŠã©ãŒã®ããã¹ãããïŒ
ã³ã³ãããŒã«ã³ã³ãããŒã©ãŒã¯ãã³ã³ãããŒã©ãŒã䜿çšããŠå
¥åããŒã¿ãåŠçãããã¬ãŒã³ããŒã·ã§ã³ãå¶åŸ¡ããŸããããã«ãããããè€éãªè¡šç€ºããžãã¯ãæŽçã§ããŸãã
ããã·ããã¥ãŒã¯ããŠãŒã¶ãŒã€ãã³ããžã®å¿çãåŠçããã ãã§ãªãããã¥ãŒãæŽæ°ãããã¹ãŠã®äœæ¥ãè¡ãã³ã³ãããŒã©ãŒã䜿çšããŠãUIèŠçŽ ã®åäœæ°ãæå°éã«æããããšã§ãããå®çŸããŸãã ãã®ã¢ãããŒãã«ããããã¥ãŒã®åé¡ãå¿é
ããããšãªããã³ã³ãããŒã©ãŒã®ãã¹ãã«éäžã§ããŸãã
ããå°ã詳ããèŠãŠã¿ãŸãããã
- ã¢ãã«ãšãã¡ã€ã³ã¯ ãMVCã®å Žåãšåæ§ãã»ãšãã©åãã§ãã
- ååçèŠè§£ã¯ã è¡åãåçè
ãšãå®å
šã«äžèŽããŠããŸããã ããããã¯ã©ã€ã¢ã³ãã«è¿ãããå¿çãšããŠèŠãããšãã§ããŸãã
- 管çã³ã³ãããŒã©ãŒã¯ãããã¥ãŒã管çããŠããè€éãªè¡šç€ºããžãã¯ãå®çŸããããšããç¹ã§ã¬ã¹ãã³ããŒã«äŒŒãŠããŸãã äžæ¹ã ã¬ã¹ãã³ããŒã¯ãã¡ã€ã³ãšçžäºäœçšãããã¯ã©ã€ã¢ã³ãããã®å
¥åãåä¿¡ããªãããã 管çã³ã³ãããŒã©ãŒã®åœ¹å²ã«é©ããŠããªãããã§ãã
- ãŸãã¯ã ã³ã³ãããŒã«ã³ã³ãããŒã©ãŒã ActionãšããŠè¡šãããšãã§ããŸããã ã¢ã¯ã·ã§ã³ã¯ãã¥ãŒïŒã€ãŸããå¿çïŒã®ç®¡çãæ
åœããŸããã
äžè¬çã«ãè¿ãã§ãããåãã§ã¯ãããŸããã
MVVMïŒModel-View-ViewModelïŒ
MVVMã¯ADRãšéšåçã«ã®ã¿é¡äŒŒããŠããŸãã MVVMã®
ã¢ãã«ã¯ãMVCã®
ã¢ãã«ããã³ADRã®
ãã¡ã€ã³ãšã»ãŒåãã§ãã åæ§ã«ãMVVMã§ã®
衚瀺ã¯ãMVCã§ã®
衚瀺ããã³ADRã§ã®
ã¬ã¹ãã³ããŒã«éåžžã«äŒŒãŠã
ãŸã ã
ãã ãã
ViewModelã¯MVCã®
ã³ã³ãããŒã©ãŒã«ãADRã®
ã¢ã¯ã·ã§ã³ã«ã䌌ãŠããŸããã ADRã¯MVCã®æ¹è¯çã§ãããããMVVMãšMVCãæ¯èŒããããšã¯ADRãšæ¯èŒããããšã«äŒŒãŠãããšæ³å®ããã®ãåççã§ãã
ãããã®éãã®è©³çŽ°ã«ã€ããŠã¯ã
Joel Wenzel ã
Avtar Singh Soha ã
Rachel Appel ã
Niraja Bhattaã®èšäºãèªãããšããå§ãããŸãã
ïŒèå³æ·±ãã¡ãŒã«ã®ãã£ã¹ã«ãã·ã§ã³ããããŸãããããã®éã«MVVMã¯MVCã«éåžžã«äŒŒãŠããã
ãã¥ãŒãš
ã¢ãã«ã®éã®çžäºäœçšã®ããã«
ãã¥ãŒã¢ãã«ãè¿œå ãããšèª¬æããŸããããããæ¬åœã«ãããªãã
ãã¥ãŒã¢ãã«ãADRã§äœ¿çšããŠMVCãšåãæåïŒã
PACïŒãã¬ãŒã³ããŒã·ã§ã³-æœè±¡å-ã³ã³ãããŒã«ïŒ
ãŠã£ãããã£ã¢ãã ïŒ
PACã¯ãšãŒãžã§ã³ãã®éå±€æ§é ã§ãããåãšãŒãžã§ã³ãã¯è¡šçŸãæœè±¡åãããã³å¶åŸ¡ã®3ã€ã®éšåã§ãã ãšãŒãžã§ã³ãïŒãã©ã€ã¢ãïŒã¯ãããããã®å¶åŸ¡éšåãä»ããŠã®ã¿äºãã«ââéä¿¡ããŸãã MVCãšã®ãã1ã€ã®éãã¯ãåãã©ã€ã¢ãã§ãè¡šçŸãšæœè±¡åïŒMVCã«é¢ããã¢ãã«ïŒãå®å
šã«åé¢ãããŠããããšã§ãã ãã®ã¢ãããŒãã«ãããç°ãªãã¹ã¬ããã§ã¢ãã«ãšãã¥ãŒã䞊è¡ããŠåŠçããããšãã§ããæœè±¡åãå®å
šã«åæåãããåã§ãã€ã³ã¿ãŒãã§ãŒã¹ïŒãã¥ãŒïŒã衚瀺ã§ãããããéåžžã«è¿
éãªéå§ã®å°è±¡ããŠãŒã¶ãŒã«æ®ããŸãã
ADRãšããŸã䌌ãŠããŸããã
RMRïŒãªãœãŒã¹ã¡ãœããè¡šçŸïŒ
ircmaxellãRedditãæããŸã§ãç§ã¯
RMRã«ã€ããŠèããŠããŸããã§ããã
ADRãšRMRã¯äºãã«éåžžã«äŒŒãŠããããããã®èŠçŽ ã¯äºãã«éåžžã«æ£ç¢ºã«å¯Ÿå¿ããŠããŸãã
Resource <--> Domain Method <--> Action Representation <--> Responder
ãã ããRMRã®ãã¥ã¢ã³ã¹ã®ããã€ãã¯ãããã2ã€ã®ã¢ãããŒãããŸã äºãã«ç°ãªããšä¿¡ããããŠããŸãã äŸïŒ
ãããã£ãŠããªããžã§ã¯ãæåèšèªã®ãã¬ãŒã ã¯ãŒã¯å
ã§ãhttpãªãœãŒã¹ïŒãªãœãŒã¹ïŒã¯ãã©ã€ããŒãããããã£ãšããããããæšæºHTTPã¡ãœããã«å¯Ÿå¿ããç¹å®ã®ãããªãã¯ã¡ãœããã®ã»ããïŒã¡ãœããïŒãæã€ãªããžã§ã¯ããšèŠãªãããšãã§ããŸãã MVCã«é¢ããŠã¯ããªãœãŒã¹ã¯å
éšã«ã³ã³ãããŒã©ãŒã®å°ããªéšåãæã€ã¢ãã«ãšããŠè¡šãããšãã§ããŸãã
å人çã«ã¯ãã³ã³ã»ãããæ··ãããããŠããããã«æããŸãã ã¢ããªã±ãŒã·ã§ã³ã§å®è¡ãããã¢ã¯ã·ã§ã³ããã¢ãã«ãããæ確ã«åé¢ããããšã奜ã¿ãŸãã
è¡šçŸã¯ãMVCã®è¡šçŸãšéåžžã«ãã䌌ãŠããŸãããªãœãŒã¹ãªããžã§ã¯ããæå®ããå¿
èŠãªåºå圢åŒã«ã·ãªã¢ã«åããã³ãã³ããæå®ããŸãã
æããã«ãããã¯ãããšãã°ãèŠã€ãããŸããããªã©ãå€ãã®HTTPå¿çã«ã¯åœãŠã¯ãŸããŸããã ãã®ãããªçãã¯ãèŠæ±ããããªãœãŒã¹ã®è¡šçŸã§ã¯ãããŸããã
äžè¬ã«ãADRã¯RMRã®æ¡åŒµããã³æ¡åŒµãããããªãšãŒã·ã§ã³ãšèŠãªãããå¯èœæ§ãé«ããADRã§å®è¡ã§ãã
ãªãœãŒã¹ãšã¢ã¯ã·ã§ã³ã¯
Domainsãš
Actionsã«æ確ã«åå²ããã
ãã¥ãŒ ïŒã€ãŸããå¿çã®çæïŒãå¶åŸ¡ãããŸã
被å ã
ã¢ãã«-æäœ-ãã¥ãŒ-ã€ãã³ãïŒMOVEïŒ
å
ã®ãµã€ãããïŒ
ã¢ãã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãç¥ã£ãŠãããã¹ãŠãã«ãã»ã«åããŸãã
ãªãã¬ãŒã·ã§ã³ã¯ãã¢ããªã±ãŒã·ã§ã³ãè¡ããã¹ãŠãã«ãã»ã«åããŸãã
ãã¥ãŒã¯ãã¢ããªã±ãŒã·ã§ã³ãšãŠãŒã¶ãŒã®éã®ãªã³ã¯ã§ãã
ã€ãã³ãã¯ãããããã¹ãŠã®èŠçŽ ãå®å
šã«æ¥ç¶ããããã«äœ¿çšãããŸãã
ããã¯ããèªäœéåžžã«èå³æ·±ããã¿ãŒã³ã§ãã
ã¢ãã«ãš
æäœã®æŠå¿µã¯ãããã¡ã€ã³é§åèšèšãã¢ãããŒãã®ãã¬ãŒã ã¯ãŒã¯ã§éåžžã«é©åã§ãããšæãããŸãã
ãã ããç¹ã«ãã®æç¹ã§ã¯ãMOVEã¯ADRã®ãããªãã®ã§ã¯ãªããšæããŸãã
ã€ãã³ãã¯ãMOVEïŒããã³MVCïŒãå¶åŸ¡ã®å転ãæäŸãããã®ã§ããããã¯ãã¢ãã«ãæŽæ°äžã®ãã¥ãŒã«é¢ããæ
å ±ãåä¿¡ããã«ãã¥ãŒãæŽæ°ã§ããããã«ããããã«å¿
èŠã§ãã
ADRã§ã¯ã
ãã¡ã€ã³ãš
ã¬ã¹ãã³ããŒã¯ãçžäºã«æŽæ°ãããŸããã
ãã¡ã€ã³ã®äœæ¥
ãå®äºããçµæã
被åã«è»¢éãããŠãã¯ã©ã€ã¢ã³ãã«ããã«è¡šç€ºãããŸãã
åé¢ãã¬ãŒã³ããŒã·ã§ã³
å¥ã®ãã¥ãŒã§ ãADRãç¹ã«
Responderãžã®åç
§ãããã€ãèŠã€ããããšãã§ããŸãã èšäºèªäœã¯èªã䟡å€ããããŸãããåå¥ã®ãã¥ãŒã¯ããã®åé¢ãå®çŸããå
·äœçãªæ¹æ³ã§ã¯ãªãããã¬ãŒã³ããŒã·ã§ã³ããããŒã¿ãåé¢ããäžè¬çãªã¢ãããŒãã説æããã¡ã¿ãã¿ãŒã³ã§ããå¯èœæ§ãé«ããªããŸãã
äŸã§ã®MVCãšADRã®æ¯èŒ
MVCã®éå§ç¹
MVCã§ã¯ãäžè¬çãªããã°ã·ã¹ãã ã®ãã£ã¬ã¯ããªæ§é ã¯æ¬¡ã®ããã«ãªããŸãã
ã€ã³ããã¯ã¹ãš
èªã¿åãã¯ä»£æ¿ãšããŠJSONåºåãæäŸããã³ã¡ã³ããã³ãã¬ãŒãã¯ãéšåçãã§ããã代æ¿ãšããŠJSONåºåãèš±å¯ããããšã«æ³šæããŠãã ããã
controllers/ BlogController.php
ãããŠãMVCã®å¥ã®ã¿ã€ãã®ãã£ã¬ã¯ããªæ§é ã¯æ¬¡ã®ãšããã§ãã
Blog/ BlogController.php
MVCã®æšæº
ã³ã³ãããŒã©ãŒã¯ã©ã¹ã¯ãããã次ã®ãšããã§ãã
Controllerã®ãã®ã¯ã©ã¹ã«ã¯ããŸããŸãªã¢ã¯ã·ã§ã³ãããããããã®ã¢ã¯ã·ã§ã³ã®ã¡ãœãããå¿çããããŒãèšå®ããããšã«æ³šæããŠãã ããã
<?php use Framework\Controller; class BlogController extends Controller { public function create() {
createïŒïŒã¡ãœããã®ããžãã¯ã¯ãã¢ãã«ãšã®ããåãã®ã»ãšãã©ã
ãµãŒãã¹ã¬ã€ã€ãŒã«ç§»ãããšã§äœããã®æ¹æ³ã§åæžã§ããŸãããæ¬è³ªã¯åããŸãŸ
ã§ããéåžžãå¿çããããŒãšã³ã³ãã³ããæ
åœããã®
ã¯ã³ã³ãããŒã©ãŒã§ã ã
ADRãã芧ãã ãã
æ¯èŒã®ããã«ãADRã䜿çšãããã©ã«ããŒæ§é ã¯æ¬¡ã®ããã«ç·šæã§ããŸãã å
ã¢ã¯ã·ã§ã³ã«ã¯ãããã«å¯Ÿå¿ãã
åçè
ãããããšã«æ³šæããŠãã ããã
Blog/ Action/ BlogIndexAction.php BlogCreateAction.php BlogReadAction.php BlogUpdateAction.php BlogDeleteAction.php Domain/
äžèšã®
createïŒïŒ Controllerã¡ãœããã«å¯Ÿå¿ãã
Actionãš
Responderã®ãã¢ã¯æ¬¡ã®ããã«ãªããŸãã
<?php use Framework\Action; class BlogCreateAction extends Action { public function __invoke() {
<?php use Framework\Responder; class BlogCreateResponder extends Responder {
ç¹°ãè¿ããŸããããã®ã³ãŒãã§ã¯ãç¹ã«
Domainã§ã®äœæ¥ã«é¢ããŠããªãã¡ã¯ã¿ãªã³ã°ã®æ©äŒãèŠã€ããããšãã§ããŸãã äž»ãªããšã¯ã
ã¢ã¯ã·ã§ã³ã
被åã®ä»äºãäœãããªããšããããšã§ãã å¿
èŠãªãã¹ãŠã®äœæ¥ã¯ã
åçè
ã®ããžãã¯ã«ãã£ãŠçŽæ¥å®è¡ãããŸãã
ADRã³ãŒãã®æ¡åŒµäŸã«ã€ããŠã¯ã
ãã¡ããã芧ãã ãã ã
ã³ã¡ã³ã
ãªã¯ãšã¹ããšã¯ã¿ãªãããŸãã
ãHTTPãªã¯ãšã¹ããã«å¯Ÿå¿ããèŠçŽ ããã¿ãŒã³ã«å«ããªãã£ããããéåžžã«å€ãã®æ¹å€ãåããŸããã ãã®åºçç©ã®ä»¥åã®ããŒãžã§ã³ã«ã¯ãã®ãããªèŠçŽ ãå«ãŸããŠããããRequest-Action-Domain-ResponseããšåŒã°ããŠããŸããã ãã ããMVCããã³åæ§ã®ã¢ãŒããã¯ãã£ãã¿ãŒã³ãããã«æ€èšãããšãå
¥åèŠçŽ ãå®çŸ©ãããã®ããªãããšã«æ°ä»ããŸããã äžè¬çãªè¡ããæãåºããªãããã«ãADRã¯ãã®èŠçŽ ãèæ
®ããŸããã
ããã³ãã³ã³ãããŒã©ãŒãªã
ãã®ãã¿ãŒã³ã¯ãäžè¬çãªWebã¢ããªã±ãŒã·ã§ã³ã§ã¯ãªãã
Model-Application-Controllerã¢ãããŒããæ¹åããããã«äœæãããŸããã ãããã£ãŠãå€ãã®Webã¢ããªã±ãŒã·ã§ã³ã«åºæã®èŠçŽ ã«ã¯æå³çã«å¯Ÿå¿ããŠããŸãããç¹ã«ãããã¯
Front Controllerã«åœãŠã¯ãŸã
ãŸã ã
ADRã¯ãã«ãŒãã£ã³ã°ãŸãã¯ã¹ã±ãžã¥ãŒãªã³ã°èŠçŽ ã«ã€ããŠã¯èª¬æããŸããããŸãã
ã¢ã¯ã·ã§ã³ãš
ã¬ã¹ãã³ããŒãã¹ã±ãžã¥ãŒãªã³ã°ã«ã©ã®ããã«é¢é£ä»ãããããã«ã€ããŠã説æããŸããã ã»ãšãã©ã®å Žåãã«ãŒãã£ã³ã°ãšã¹ã±ãžã¥ãŒãªã³ã°ã¯
ããã³ãã³ã³ãããŒã©ãŒã®è²¬ä»»ã§ããã
ã¢ã¯ã·ã§ã³ ã
ã¬ã¹ãã³ã㌠ã
ããã³ãã³ã³ãããŒã©ãŒéã®çžäºäœçšã確ç«ããæ¹æ³ã¯å€æ°ãã
ãŸã ã
- ã¢ã¯ã·ã§ã³ã¯ãèŠæ±ãžã®å¿çãè¿ãResponderãçŽæ¥åŒã³åºãããšãã§ããŸãã
- ã¬ã¹ãã³ããŒãšã¬ã¹ãã³ã¹ã¯ãããããçŽæ¥åŒã³åºãããã³ãã³ã³ãããŒã©ãŒã§å©çšã§ããŸãã
- ã¢ã¯ã·ã§ã³ã¯Responderãè¿ãããšãã§ããŸããResponderãåŒã³åºãããåŒã³åºãããŠããèªäœãéä¿¡ããå¿çãè¿ããŸãã
- ãªã©ãªã©ã
ADRãã¿ãŒã³ã¯ã
ããã³ãã³ã³ãããŒã©ãŒã®äžéšã§ããå¯èœæ§ããããããäºåãã£ã«ã¿ãªã³ã°ãŸãã¯èŠæ±æ€èšŒã®èŠçŽ ãèšè¿°ããŸããã äºåãã£ã«ã¿ãªã³ã°ãšãªã¯ãšã¹ãã®æ€èšŒã®ããžãã¯ã«å¿ããŠã
ã¢ã¯ã·ã§ã³ã¯
ResponderãåŒã³åºãããç¬èªã®å¿çãè¿ãããããžãã¯ã®æäœã®çµæãšããŠè¿œå ã®
ã¢ã¯ã·ã§ã³ãåŒãèµ·ãããªã©ã®ããšã«æ³šæããŠãã ããã åæ§ã«ãåŒã³åºããã
ã¢ã¯ã·ã§ã³ã¯ç¬èªã®ãã§ãã¯ã»ãããæã€ããšãã§ãã
ãã¡ã€ã³ãšå¯Ÿè©±ããããšãªã
ã¬ã¹ãã³ããŒãåŒã³åºãããŸãã ãã®ãããªãççž®ãã³ãŒã«ãã§ãŒã³ã®çç±ã¯æ¬¡ã®ãšããã§ãã
- HTTPã¡ãœããã®äžæŽåã ã«ãŒãã£ã³ã°ã·ã¹ãã ã䜿çšãããHTTPã¡ãœãããšèŠæ±ãããActionã®éã®å¯Ÿå¿ãèŠã€ããªããªãã ããã³ãã³ã³ãããŒã©ãŒã¯Actionã«èŠæ±ãåãã代ããã«ãšã©ãŒå¿çãè¿ããããããŸããã
- èªèšŒ ã¯ã©ã€ã¢ã³ãã¢ã¯ã»ã¹æš©ïŒããã³ãã®æå¹æ§ïŒã®æç¡ã¯ããã®Actionäžã«ActionãåŒã³åºããã ãã¡ã€ã³ãšå¯Ÿè©±ããå¿
èŠæ§ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
- èªå¯ ã¢ã¯ã»ã¹å¶åŸ¡ã·ã¹ãã ã¯ãç¹å®ã®Actionã«å¯Ÿããã¯ã©ã€ã¢ã³ããªã¯ãšã¹ããæåŠãããã ãã¡ã€ã³ãšå¯Ÿè©±ããã«Actionãå®è¡ãããå Žåã«ãã£ãŠã¯ç¬èªã«å¿çãè¿ããšããäºå®ã«ã€ãªããå¯èœæ§ããããŸãã
- ã³ã³ãã³ãã®äžäžèŽã ããã³ãã³ã³ãããŒã©ãŒ ã ã¢ã¯ã·ã§ã³ããŸãã¯ãªã¯ãšã¹ãã®åŠçã«é¢ä¿ãããã®ä»ã®èŠçŽ ã¯ãã¯ã©ã€ã¢ã³ããªã¯ãšã¹ãã®AcceptããããŒã確èªã§ããŸãã / .
- . - , .
ADRã¯ãç¬ç«ãããã¿ãŒã³ã§ã¯ãªããModel-View-Controller pattern ã®ã³ã³ãããŒã©ãŒãšãã¥ãŒã®ããŒãã®ããªãšãŒã·ã§ã³ãšåŒã¶ããšãã§ããŸãã次ã«ãActionã¯Page Controllerã«äŒŒãããªãšãŒã·ã§ã³ã§ããããã®ã³ã³ããã¹ãã§ã¯ãããæ£ç¢ºãªååã¯Action Controllerã§ããå¯èœæ§ããããŸãããã®å ŽåãMVC ã®ã³ã³ãããŒã©ãŒã«å¯Ÿå¿ããŸãã ïŒããã«ãããŒãžã³ã³ãããŒã©ãŒã®æ£åŒãªèª¬æã§ã¯ãããããããŒãžãŸãã¯ã¢ã¯ã·ã§ã³ãã§ãããšè¿°ã¹ãããŠããŸãïŒãåæ§ã«ãåçè
ãèæ
®ããããšãã§ããŸããã³ãã¬ãŒããã¥ãŒãŸãã¯ãã©ã³ã¹ãã©ãŒã ãã¥ãŒã«é¡äŒŒããããªãšãŒã·ã§ã³ãšããŠããããŠãããå¿çãã¥ãŒãšåŒã¶ã®ãè³¢æã§ãããããããã£ãŠãã¬ã¹ãã³ããŒã¯MVCã®ViewèŠçŽ ã«å®å
šã«é©åããŸããäžèšã®ãã¹ãŠã«ããããããããããã®ä»£æ¿ã®å®åŒåã¯ãåå¥ã®ADRãã¿ãŒã³ã®ãã¬ãŒã ã¯ãŒã¯ã§ã®ã¢ãããŒãã®èª¬æã»ã©è¯å¥œã§æ£ç¢ºã§ã¯ãªããšèããŠããŸããã»ãšãã©ã®å Žåãã¢ãã«ãšãã¥ãŒã®éã®å
éšçžäºäœçšã«ãããMVCã§ã¯ãã¥ãŒã¯ã¢ãã«ãæŽæ°ããŸãããADRã§ã¯ã¬ã¹ãã³ã㌠ã¯æŽæ°ããŸãããã¡ã€ã³ããããŸããªãã¡ã€ã³
ãã¡ã€ã³ã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯ã©ã¹ã®ã»ããã ãã§ãªãããã®ç¶æ
ãšç°å¢ã®ç¶æ
ãå«ãŸããŸããããããModelãšåŒã°ããå¯èœæ§ããããŸãããããã¯æ··ä¹±ãè¿œå ããã ãã§ããããã«ãã¢ã¯ã·ã§ã³ã¯ããã¡ã€ã³ããåä¿¡ããããŒã¿ã§ã¯ãªãããã¬ãŒã³ããŒã·ã§ã³ã¢ãã«ã被åã«éä¿¡ããå¿
èŠãããå¯èœæ§ããããŸãããã ãããã®å Žåãã¢ã¯ã·ã§ã³ã«ãã£ãŠåŒã³åºããããã¡ã€ã³ããã¢ããªã±ãŒã·ã§ã³ã®ç¶æ
ãã«ãã»ã«åããã¢ãã«ãã¥ãŒãè¿ãå¯èœæ§ããããŸãããããã«ããŠããADRã¯MVCã®æ¹è¯çãšããŠæäŸãããŸããããã«åºã¥ããŠãç§ãã¡ã¯çŽèšãããšãã§ããŸãADR ã®ãã¡ã€ã³ã¯ãMVCã®ã¢ãã«ãšåãã§ããã¢ã¯ã·ã§ã³ã®èª¬æ
ã³ã¡ã³ãã®1人ã¯ãçä¿¡ãªã¯ãšã¹ãã«å¿ããŠç°ãªãããžãã¯ãåäœããããã«ã¢ã¯ã·ã§ã³ãç·šæã§ãããšææããŸãããããšãã°ãèªè
ã¯Actionãæ¡åŒµããç°ãªãHTTPã¡ãœãããæäœããããã®æ©èœãè¿œå ããŠãåãHTTPã¡ãœããã®ããžãã¯ãåãActionã«é
眮ã§ããããšãææ¡ããŸãããç§ã®æèŠã§ã¯ããã¿ãŒã³èªäœã¯åã¢ã¯ã·ã§ã³ã1ã€ã®æ©èœã®ã¿ãå®è¡ãããšããèããè¡šããŠãããããã¯ã³ã³ãããŒã©ãŒãšã¢ã¯ã·ã§ã³ãããã³ADRãšRMRãã¿ãŒã³ã®æ¯èŒããæããã«ç¶ããŸãããããæ確ãªåœ¢åŒã§å床æ確ã«ããŸãïŒæå³ããã¯ãã¹ãŠã®è¡åã§ãã çä¿¡èŠæ±ã«å¿ããŠãã¢ã¯ã·ã§ã³ã1ã€ã ãå®è¡ããå¿
èŠããããŸããMVCã®ãã¡ã€ãã©ã€ãºã§ã¯ãªãã眮æ
ADRããµãŒããŒã¢ããªã±ãŒã·ã§ã³ã«äœ¿çšãããMVCã®ä»£æ¿ãšèŠãªãããã¹ããã€ãã¢ã€ãã«ãªããžã§ã¯ãïŒMVCãã¿ãŒã³ã«ã€ããŠåŠã¹ã°åŠã¶ã»ã©ãWebã¢ããªã±ãŒã·ã§ã³ã®ãµãŒããŒåŽã«é©ããŠãããšã¯èšããŸããã<...> ADRã®ããªãã®ã¢ã€ãã¢ã®äž»ãªãã¬ãŒã¯ã¹ã«ãŒã¯ãç§ã«ã¯æªãæœè±¡åãšæããããã®ããã®åé¢ã§ãããšæããŸãã絶察ã«å¿
èŠã§ãªãéããMVCã®çšèªã§ADRãèšè¿°ããããšã¯é¿ããŠãã ããã
å®å
šãªã³ã¡ã³ãããã®ä»ã®ã³ã¡ã³ã
ãã®ã¢ã€ãã¢ã説æããå
ã®ããã°æçš¿ã¯ãã¡ãã§ããStefan Hochderfer ã¯ãã®æçš¿ã§ç§ã®èãã«çããŸããããããšredditã§ããã«è°è«ãç¶ããããŸãããJohn LeightonãFocused Controllerã«ã€ããŠæžããŸãããããã¯ãADRã®Actionã«éåžžã«ãã䌌ãŠããŸããRepresentationãšRespondentãæ¯èŒãã次ã®æçš¿ã¯ããã«ãããredditã«é¢ããã³ã¡ã³ãã¯ãããšããã«ãããŸããã³ãªã¿ãã¢ãããã¯ãããã§åœŒã®ã³ã¡ã³ããæäŸããŠããŸããé·æãšçæ
å
æ¬çãªå©ç¹ã®1ã€ã¯ããã¿ãŒã³ãWebäžã§æãäžè¬çãªå¯Ÿè©±ã·ããªãªãããæ£ç¢ºã«èšè¿°ããããšã§ããèŠæ±ãæ¥ãŠãã¢ã¯ã·ã§ã³ã«ãªãã€ã¬ã¯ãããŸããã¢ã¯ã·ã§ã³ã¯ãã¡ã€ã³ãšå¯Ÿè©±ãããã®åŸãå¿çãæ§ç¯ãããŸããããããŒãšã³ã³ãã³ãã®äž¡æ¹ãå«ãå¿çäœæ¥ã¯ãã¢ã¯ã·ã§ã³äœæ¥ããå®å
šã«å®å
šã«åé¢ãããŠããŸããè€éãªæ¬ é¥ã®1ã€ã¯ãã¢ããªã±ãŒã·ã§ã³å
ã®ã¯ã©ã¹ã®å¢å ã«å¯ŸåŠããå¿
èŠãããããšã§ããåActionã ãã§ãªããåRespondentãç¬èªã®ã¯ã©ã¹ãåãåããŸãããããããã®æ¬ é¥ã¯é·æçã«ã¯ããã»ã©ã²ã©ããªãã§ããããå¥åã®ã¯ã©ã¹ãäœæããå¿
èŠããããšãç¶æ¿éå±€ãããæ確ã«ãªããæ·±ããªããŸãããã¢ã¯ã·ã§ã³ã®åé¢ãããŠåçè
ã¯ãããè¯ããã¹ã容ææ§ãä¿é²ããŸããç°ãªãã·ã¹ãã ã§ã¯ããããã®æ©èœã¯ããŸããŸãªæ¹æ³ã§çŸããŸããã¯ã©ã¹ã®æŠèŠã¯éåžžãã¡ãœããã®æŠèŠãããåçŽã§ãããããããŸããŸãªã³ãŒããšãã£ã¿ãIDEã§ãå€ãã®ã¯ã©ã¹ããåŠçããæ¹ããã¯ã©ã¹ãæžãããŠã¡ãœãããå¢ãããããã䟿å©ã§ããããšã«æ°ä»ããŸãããæè¬ã®æ°æã¡
ç§ã¯ã質åãã³ã¡ã³ããæ¹å€ããŸãã¯æšå¥šäºé
ãšãšãã«ããã®ææ¡ã®äœæã«ååããŠããããã¹ãŠã®äººã«æè¬ããŸãããããšã¯å¥ã«ã次ã®äººã
ã«æè¬ããŸãã- ãã·ã¥ãŒã»ã¯ã€ã¢ãŒã»ãªãã£ããŒ
- ããªkt
- ã¹ããã¡ã³ã»ããããã¡ãŒ
- ã¢ãã ã«ã«ã
- ãã³ã»ããªã¬ã³
- ãžã§ã·ã¥ã»ããã¯ããŒã
- ããŒã·ã¡ã³ã»ã³