ç®ç
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 # index(), create(), read(), update(), delete() models/ BlogModel.php views/ blog/ index.html.php index.json.php create.html.php read.html.php read.json.php update.html.php delete.html.php _comments.html.php _comments.json.php
ãããŠãMVCã®å¥ã®ã¿ã€ãã®ãã£ã¬ã¯ããªæ§é ã¯æ¬¡ã®ãšããã§ãã
Blog/ BlogController.php # index(), create(), read(), update(), delete() BlogModel.php views/ index.html.php index.json.php create.html.php read.html.php read.json.php update.html.php delete.html.php _comments.html.php _comments.json.php
MVCã®æšæºã³ã³ãããŒã©ãŒã¯ã©ã¹ã¯ãããã次ã®ãšããã§ãã Controllerã®ãã®ã¯ã©ã¹ã«ã¯ããŸããŸãªã¢ã¯ã·ã§ã³ãããããããã®ã¢ã¯ã·ã§ã³ã®ã¡ãœãããå¿çããããŒãèšå®ããããšã«æ³šæããŠãã ããã
<?php use Framework\Controller; class BlogController extends Controller { public function create() { // is this a POST request? if ($this->request->isPost()) { // retain incoming data $data = $this->request->getPost('blog'); // create a blog post instance $blog = $this->blog_model->newInstance($data); // is the new instance valid? if ($blog->isValid()) { // yes, save and redirect to editing $blog->save(); $this->response->redirect('/blog/edit/{$blog->id}'); return; } else { // no, show the "create" form with the blog instance $this->response->setContent($this->view->render( 'create.html.php', array('blog' => $blog), )); return; } } else { // not a POST request, show the "create" form with defaults $this->response->setContent($this->view->render( 'create.html.php', array('blog' => $this->blog_model->getDefault()) )); } } public function index() { // ... } public function read($id) { // ... } public function update($id) { // ... } public function delete($id) { // ... } } ?>
createïŒïŒã¡ãœããã®ããžãã¯ã¯ãã¢ãã«ãšã®ããåãã®ã»ãšãã©ããµãŒãã¹ã¬ã€ã€ãŒã«ç§»ãããšã§äœããã®æ¹æ³ã§åæžã§ããŸãããæ¬è³ªã¯åããŸãŸã§ããéåžžãå¿çããããŒãšã³ã³ãã³ããæ åœããã®ã¯ã³ã³ãããŒã©ãŒã§ã ã
ADRãã芧ãã ãã
æ¯èŒã®ããã«ãADRã䜿çšãããã©ã«ããŒæ§é ã¯æ¬¡ã®ããã«ç·šæã§ããŸãã åã¢ã¯ã·ã§ã³ã«ã¯ãããã«å¯Ÿå¿ããåçè ãããããšã«æ³šæããŠãã ããã
Blog/ Action/ BlogIndexAction.php BlogCreateAction.php BlogReadAction.php BlogUpdateAction.php BlogDeleteAction.php Domain/ # Model, Gateway, Mapper, Entity, Collection, Service, etc. Responder/ BlogIndexResponder.php BlogCreateResponder.php BlogReadResponder.php BlogUpdateResponder.php BlogDeleteResponder.php html/ index.html.php create.html.php read.html.php update.html.php delete.html.php _comments.html.php json/ index.json.php read.json.php _comments.json.php
äžèšã®createïŒïŒ Controllerã¡ãœããã«å¯Ÿå¿ããActionãšResponderã®ãã¢ã¯æ¬¡ã®ããã«ãªããŸãã
<?php use Framework\Action; class BlogCreateAction extends Action { public function __invoke() { // is this a POST request? if ($this->request->isPost()) { // yes, retain incoming data $data = $this->request->getPost('blog'); // create a blog post instance $blog = $this->blog_model->newInstance($data); // is the new instance valid? if ($blog->isValid()) { $blog->save(); } } else { // not a POST request, use default values $blog = $this->blog_model->getDefault(); } // set data into the response $this->responder->setData(array('blog' => $blog)); $this->responder->__invoke(); } } ?>
<?php use Framework\Responder; class BlogCreateResponder extends Responder { // $this->response is the actual response object, or a response descriptor // $this->view is a view or template system public function __invoke() { // is there an ID on the blog instance? if ($this->data->blog->id) { // yes, which means it was saved already. // redirect to editing. $this->response->setRedirect('/blog/edit/{$blog->id}'); } else { // no, which means it has not been saved yet. // show the creation form with the current response data. $this->response->setContent($this->view->render( 'create.html.php', $this->data )); } } } ?>
ç¹°ãè¿ããŸããããã®ã³ãŒãã§ã¯ãç¹ã«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
- ã¹ããã¡ã³ã»ããããã¡ãŒ
- ã¢ãã ã«ã«ã
- ãã³ã»ããªã¬ã³
- ãžã§ã·ã¥ã»ããã¯ããŒã
- ããŒã·ã¡ã³ã»ã³