æè¿ã®DotNext 2018ã«ã³ãã¡ã¬ã³ã¹ã§ããã¡ã€ã³ããªãã³ãã¶ã€ã³ã®BoFãéå¬ãããŸããã ããã¯ãçœç±ããè°è«ãåŒãèµ·ãããäŸå€ãæ±ãåé¡ã«å¯ŸåŠããŸãããããããäž»èŠãªãããã¯ã§ã¯ãªãã£ãã®ã§ã詳现ãªè°è«ãåãåããŸããã§ããã
ãŸããã¹ã¿ãã¯ãªãŒããŒãããŒã«é¢ãã質åããææã¢ãŒããã¯ãã£ã³ãŒã¹ã§çµãããŸã§ãå€ãã®ãªãœãŒã¹ãç 究ãããšãITã³ãã¥ããã£ãäŸå€ãšãã®äœ¿çšæ¹æ³ã«å¯ŸããŠææ§ãªæ 床ãæã£ãŠããããšãããããŸãã
ã»ãšãã©ã®å ŽåãäŸå€ã䜿çšãããšã gotoæŒç®åã»ãã³ãã£ã¯ã¹ãæã€å®è¡ã¹ã¬ãããç°¡åã«æ§ç¯ã§ããã³ãŒãã®å¯èªæ§ã«æªåœ±é¿ãäžãããšèšãããŠããŸãã
ç¬èªã®çš®é¡ã®äŸå€ãäœæãããã.NETã§æäŸãããæšæºçãªäŸå€ã䜿çšãããã«ã€ããŠãããŸããŸãªæèŠããããŸãã
誰ããäŸå€ã®æ€èšŒãè¡ããã©ãã§ã誰ããResultã¢ããã䜿çšããŸãã Resultã䜿çšãããšãã¡ãœããã·ã°ããã£ã«ãã£ãŠãå®è¡ãæåããã ãã§ã¯ãªããã©ãããç解ã§ããŸãã ããããåœä»€åèšèªïŒCïŒãå«ãïŒã§ã¯ãResultãåºã䜿çšãããŠãããããã³ãŒããèªã¿ã«ãããªããèšèªæ§é ãæ»æããããããå ã®ã¹ã¯ãªãããäœæããã®ã¯å°é£ã§ãã
ãã®èšäºã§ã¯ãç§ãã¡ã®ããŒã ãæ¡çšããŠãããã©ââã¯ãã£ã¹ã«ã€ããŠèª¬æããŸãïŒèŠããã«ãç§ãã¡ã¯ãã¹ãŠã®ã¢ãããŒãã䜿çšããŠããŸããããããããã°ãã§ã¯ãããŸããïŒã
ASP.NET MVC + WebAPIã«åºã¥ããŠæ§ç¯ããããšã³ã¿ãŒãã©ã€ãºã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠã§ãã ã¢ããªã±ãŒã·ã§ã³ã¯ã¿ããã®ã¢ãŒããã¯ãã£ã§æ§ç¯ãããããŒã¿ããŒã¹ããã³ã¡ãã»ãŒãžãããŒã«ãŒãšéä¿¡ããŸãã ELKã¹ã¿ãã¯ãžã®æ§é åããããã®ã³ã°ã䜿çšããGrafanaã«ããç£èŠãèšå®ãããŸãã
次ã®3ã€ã®èŠ³ç¹ããäŸå€ã®åŠçãæ€èšããŸãã
- äžè¬çãªäŸå€èŠå
- äŸå€ããšã©ãŒãããã³ã¿ããã®ã®ã¢ãŒããã¯ãã£
- Webã¢ããªã±ãŒã·ã§ã³ã®ç¹æ®ãªã±ãŒã¹
äžè¬çãªäŸå€èŠå
- äŸå€ãšãšã©ãŒã¯åããã®ã§ã¯ãããŸããã äŸå€ã«ã€ããŠã¯ããšã©ãŒã«ã€ããŠã¯äŸå€ã䜿çšããŸã-çµæã
- äŸå€ã¯äŸå€çãªç¶æ³ã«ã®ã¿åœãŠã¯ãŸããå®çŸ©äžãå€ãã®å Žåã¯ããããããšã¯ã§ããŸããã ãããã£ãŠãäŸå€ãå°ãªãã»ã©åªããŠããŸãã
- äŸå€åŠçã¯ã§ããã ã现ããããå¿ èŠããããŸãã ãªãã¿ãŒã圌ã®èšå¿µç¢çãªäœåã§æžããããã«ã
- ãšã©ãŒãå ã®åœ¢åŒã§ãŠãŒã¶ãŒã«é ä¿¡ããå¿ èŠãããå Žåã¯ãçµæã䜿çšããŸãã
- äŸå€ã¯ãã·ã¹ãã ã®å¢çãå ã®åœ¢ã®ãŸãŸã«ããªãã§ãã ããã ããã¯ãŠãŒã¶ãŒãã¬ã³ããªãŒã§ã¯ãªããæ»æè ãã·ã¹ãã ã®æœåšçãªåŒ±ç¹ãããã«èª¿æ»ããæ¹æ³ãæäŸããŸãã
- ã¹ããŒãããäŸå€ãã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠåŠçãããå ŽåãäŸå€ã§ã¯ãªãResultã䜿çšããŸãã äŸå€ã®å®è£ ã¯gotoæŒç®åã«ãã£ãŠé ãããããã«æªãããšã«ãåŠçã³ãŒããäŸå€ã¹ããŒã³ãŒãããé ããªããŸãã çµæã¯ããšã©ãŒã®å¯èœæ§ãæ瀺çã«å®£èšãããã®ãç·åœ¢ãåŠçã®ã¿ãèš±å¯ããŸãã
äŸå€ããšã©ãŒãããã³ã¿ããã®ã®ã¢ãŒããã¯ãã£
次ã®ã»ã¯ã·ã§ã³ã§ã¯ã次ã®ã¬ã€ã€ãŒã®äŸå€/ãšã©ãŒãã¹ããŒ/åŠçãã責任ãšã«ãŒã«ãæ€èšããŸãã
- ã¢ããªã±ãŒã·ã§ã³ãã¹ã
- ã€ã³ãã©
- ã¢ããªã±ãŒã·ã§ã³ãµãŒãã¹
- ãã¡ã€ã³ã³ã¢
ã¢ããªã±ãŒã·ã§ã³ãã¹ã
責任ã¯äœã§ãã
- ã³ã³ããžã·ã§ã³ã®ã«ãŒã ãã¢ããªã±ãŒã·ã§ã³å šäœã®åäœãã«ã¹ã¿ãã€ãºããŸãã
- å€ã®äžçãšã®çžäºäœçšã®å¢çã¯ããŠãŒã¶ãŒãä»ã®ãµãŒãã¹ãäºå®ãããŠããèµ·åã§ãã
ãããã¯éåžžã«è€éãªè²¬ä»»ã§ãããããèªåèªèº«ãå¶éãã䟡å€ããããŸãã æ®ãã®è²¬ä»»ã¯å å±€ã«äžããŸãã
çµæãããšã©ãŒãåŠçããæ¹æ³
é©åãªåœ¢åŒïŒããšãã°ãhttpå¿çïŒã«å€æããŠãå€éšã«ãããŒããã£ã¹ãããŸãã
çµæã®çææ¹æ³
ãŸããã ãã®ã¬ã€ã€ãŒã«ã¯ããžãã¯ãå«ãŸããŠããªãããããšã©ãŒãçæããå Žæã¯ãããŸããã
äŸå€ãåŠçããæ¹æ³
- 詳现ãé衚瀺ã«ããŠãå€éšãžã®éä¿¡ã«é©ãã圢åŒã«å€æããŸã
- ãã°ã€ã³ããŸãã
äŸå€ãã¹ããŒããæ¹æ³
ãŸããããã®å±€ã¯æãå€éšã§ãããããžãã¯ãå«ãã§ããŸãã-äŸå€ãã¹ããŒãã人ã¯ããŸããã
ã€ã³ãã©
責任ã¯äœã§ãã
- ããŒããžã®ã¢ããã¿ãŒ ããŸãã¯åçŽã«ãã¡ã€ã³ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£ ããã€ã³ãã©ã¹ãã©ã¯ãã£ïŒãµãŒãããŒãã£ãµãŒãã¹ãããŒã¿ããŒã¹ãã¢ã¯ãã£ããã£ã¬ã¯ããªãªã©ïŒãžã®ã¢ã¯ã»ã¹ãæäŸããŸãããã®ã¬ã€ã€ãŒã¯ãã§ããã ãæãã§ãã§ããã ãããžãã¯ãå°ãªãããå¿ èŠããããŸãã
- å¿ èŠã«å¿ããŠã è æé²æ¢ã¬ã€ã€ãŒãšããŠæ©èœã§ããŸãã
çµæãããšã©ãŒãåŠçããæ¹æ³
Resultã¢ããã§å®è¡ãããŠããããŒã¿ããŒã¹ããã®ä»ã®ãµãŒãã¹ã®ãããã€ããŒãããããŸããã ãã ããäžéšã®ãµãŒãã¹ã¯æ»ãã³ãŒãã§åäœããŸãã ãã®å ŽåãããŒãã«å¿ èŠãªçµæ圢åŒã«å€æããŸãã
çµæã®çææ¹æ³
äžè¬çãªå Žåããã®ã¬ã€ã€ãŒã«ã¯ããžãã¯ãå«ãŸããŠããªãããããšã©ãŒã¯çæãããŸããã ãã ããç Žæé²æ¢ã¬ã€ã€ãŒãšããŠäœ¿çšããå Žåã¯ãããŸããŸãªãªãã·ã§ã³ãå¯èœã§ãã ããšãã°ãã¬ã¬ã·ãŒãµãŒãã¹ããã®äŸå€ã解æããåçŽãªæ€èšŒã¡ãã»ãŒãžã§ããäŸå€ãçµæã«å€æããŸãã
äŸå€ãåŠçããæ¹æ³
äžè¬çãªå Žåãå¿ èŠã«å¿ããŠã詳现ãä¿è·ããŠããã«ã¹ããŒããŸãã å®è£ ãããŠããããŒããResultãã³ã³ãã©ã¯ãã«è¿ãããšãèš±å¯ããŠããå Žåãã€ã³ãã©ã¹ãã©ã¯ãã£ã¯ãåŠçå¯èœãªäŸå€ã®ã¿ã€ããResultã«å€æããŸãã
ããšãã°ããããžã§ã¯ãã§äœ¿çšãããã¡ãã»ãŒãžãããŒã«ãŒã¯ããããŒã«ãŒãå©çšã§ããªããšãã«ã¡ãã»ãŒãžãéä¿¡ããããšãããšäŸå€ãã¹ããŒããŸãã ã¢ããªã±ãŒã·ã§ã³ãµãŒãã¹ã¬ã€ã€ãŒã¯ãã®ç¶æ³ã«å¯Ÿå¿ããŠãããåè©Šè¡ããªã·ãŒããµãŒããããã¬ãŒã«ãŒããŸãã¯æåã®ããŒã¿ããŒã«ããã¯ã§åŠçã§ããŸãã
ãã®å Žåãã¢ããªã±ãŒã·ã§ã³ãµãŒãã¹ã¬ã€ã€ãŒã¯ããšã©ãŒã®å Žåã«çµæãè¿ãã³ã³ãã©ã¯ãã宣èšããŸãã ãŸããã€ã³ãã©ã¹ãã©ã¯ãã£å±€ã¯ãã®ããŒããå®è£ ãããããŒã«ãŒããã®äŸå€ãçµæã«å€æããŸãã åœç¶ãç¹å®ã®çš®é¡ã®äŸå€ã®ã¿ãå€æãããã¹ãŠãé£ç¶ããŠå€æããããã§ã¯ãããŸããã
ãã®ã¢ãããŒãã䜿çšãããšã2ã€ã®å©ç¹ãåŸãããŸãã
- å¥çŽã®èª€ãã®å¯èœæ§ãæ瀺çã«å®£èšããŸãã
- ç¹å®ã®ã¡ãã»ãŒãžãããŒã«ãŒããæœè±¡åãããŠãããããã¢ããªã±ãŒã·ã§ã³ãµãŒãã¹ããšã©ãŒã®åŠçæ¹æ³ãç¥ã£ãŠããããäŸå€ã®çš®é¡ãç¥ããªãç¶æ³ãåãé€ããŸãã åºæ¬System.Exceptionã«catchãããã¯ãæ§ç¯ãããšããããšã¯ãã¢ããªã±ãŒã·ã§ã³ãµãŒãã¹ãåŠçã§ããäŸå€ã ãã§ãªãããã¹ãŠã®çš®é¡ã®äŸå€ããã£ããããããšãæå³ããŸãã
äŸå€ãã¹ããŒããæ¹æ³
ã·ã¹ãã ã®è©³çŽ°ã«äŸåããŸãã
ããšãã°ãååšããªãããŒã¿ãèŠæ±ãããšãSingleããã³First LINQã¹ããŒãã¡ã³ãã¯InvalidOperationExceptionãã¹ããŒããŸãã ãã ãããã®ã¿ã€ãã®äŸå€ã¯.NETã®ãã¹ãŠã®å Žæã§äœ¿çšãããããã现ããåŠçããããšã¯ã§ããŸããã
ç§ãã¡ã®ããŒã ã¯ãã«ã¹ã¿ã ItemNotFoundExceptionãäœæããèŠæ±ãããããŒã¿ãèŠã€ããããããžãã¹ã«ãŒã«ã«åŸã£ãŠããã§ãªãå Žåã¯ã€ã³ãã©ã¹ãã©ã¯ãã£ã¬ã€ã€ãŒãããããã¹ããŒãããšããæ £è¡ãæ¡çšããŠããŸãã
èŠæ±ãããããŒã¿ãèŠã€ããããããã蚱容ãããå Žåã¯ãããŒãã³ã³ãã©ã¯ãã§æ瀺çã«å®£èšããå¿ èŠããããŸãã ããšãã°ã Maybeã¢ããã䜿çšããŸãã
ã¢ããªã±ãŒã·ã§ã³ãµãŒãã¹
責任ã¯äœã§ãã
- å ¥åããŒã¿ã®æ€èšŒã
- ãµãŒãã¹ã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ãšèª¿æŽ-ãã©ã³ã¶ã¯ã·ã§ã³ã®éå§ãšçµäºãåæ£ã¹ã¯ãªããã®å®è£ ãªã©ã
- ããŒããä»ããŠãã¡ã€ã³ãªããžã§ã¯ããšå€éšããŒã¿ãã€ã³ãã©ã¹ãã©ã¯ãã£ã«ããŠã³ããŒããããã®åŸãã¡ã€ã³ã³ã¢ã§ã³ãã³ããåŒã³åºããŸãã
çµæãããšã©ãŒãåŠçããæ¹æ³
ãã¡ã€ã³ã³ã¢ããã®ãšã©ãŒã¯ãå€éšã®äžçã«ãã®ãŸãŸå€æãããŸãã ã€ã³ãã©ã¹ãã©ã¯ãã£ããã®ãšã©ãŒã¯ãåè©Šè¡ããµãŒããããã¬ãŒã«ãŒããŸãã¯å€éšãžã®ãããŒããã£ã¹ããéããŠåŠçã§ããŸãã
çµæã®çææ¹æ³
çµæãšããŠæ€èšŒãå®è£ ã§ããŸãã
æäœã®éšåçãªæåã«é¢ããéç¥ãçæã§ããŸãã ããšãã°ãã泚æã¯æ£åžžã«éä¿¡ãããŸããããé éå äœæã®ç¢ºèªäžã«ãšã©ãŒãçºçããŸããã ã¹ãã·ã£ãªã¹ããããã«ãé£çµ¡ããé éã®è©³çŽ°ãæ確ã«ããŸãã
äŸå€ãåŠçããæ¹æ³
ã¢ããªã±ãŒã·ã§ã³ãåŠçã§ããã€ã³ãã©ã¹ãã©ã¯ãã£äŸå€ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£å±€ã«ãã£ãŠãã§ã«çµæã«å€æãããŠãããšä»®å®ãããšããŸã£ããåŠçããŸããã
äŸå€ãã¹ããŒããæ¹æ³
äžè¬çã«ã¯ãããŸããã ããããèšäºã®æåŸã®ã»ã¯ã·ã§ã³ã§èª¬æãããŠããå¢çç·ãªãã·ã§ã³ããããŸãã
ãã¡ã€ã³ã³ã¢
責任ã¯äœã§ãã
ããžãã¹ããžãã¯ã®å®è£ ãã·ã¹ãã ã®ãã³ã¢ããããã³ãã®ååšã®äž»ãªæå³ã
çµæãããšã©ãŒãåŠçããæ¹æ³
ã¬ã€ã€ãŒã¯å éšã«ãããåããã¡ã€ã³å ã®ãªããžã§ã¯ãããã®ã¿ãšã©ãŒãçºçããå¯èœæ§ããããããããžãã¹ã«ãŒã«ãŸãã¯å ã®åœ¢åŒã§ã®ãšã©ãŒã®äžäœå€æã«åŠçãåæžãããŸãã
çµæã®çææ¹æ³
ãã¡ã€ã³ã³ã¢ã«ã«ãã»ã«åãããã¢ããªã±ãŒã·ã§ã³ãµãŒãã¹ã¬ãã«ã§ã®å ¥åããŒã¿ã®æ€èšŒã§ã«ããŒãããªãããžãã¹ã«ãŒã«ã«éåããå Žåã äžè¬ã«ããã®ã¬ã€ã€ãŒã§ã¯ãçµæãæãé »ç¹ã«äœ¿çšãããŸãã
äŸå€ãåŠçããæ¹æ³
ãŸããã ã€ã³ãã©ã¹ãã©ã¯ãã£ã®äŸå€ã¯ã€ã³ãã©ã¹ãã©ã¯ãã£ã¬ã€ã€ãŒã«ãã£ãŠæ¢ã«åŠçãããŠãããããŒã¿ã¯æ¢ã«å°çããã¢ããªã±ãŒã·ã§ã³ãµãŒãã¹ã¬ã€ã€ãŒã®ãããã§æ§é åãããå®å šã§ãæ€èšŒãããŠããŸãã ãããã£ãŠãé£ã³åºãå¯èœæ§ã®ãããã¹ãŠã®äŸå€ã¯æ¬åœã«äŸå€ã«ãªããŸãã
äŸå€ãã¹ããŒããæ¹æ³
éåžžãããã§ã¯äžè¬çãªã«ãŒã«ãæ©èœããŸããäŸå€ãå°ãªãã»ã©è¯ãã§ãã
ããããã³ãŒããæžããŠãç¹å®ã®æ¡ä»¶äžã§ã¯ã²ã©ãããžãã¹ãã§ããããšãç解ããç¶æ³ã«ãªã£ãããšã¯ãããŸããïŒ ããšãã°ããéã2åååŽããããããŒã¿ãå°ç¡ãã«ããããããšã骚ãåéã§ããŸããã
ååãšããŠããªããžã§ã¯ãã®çŸåšã®ç¶æ ã«å¯ŸããŠç¡å¹ãªã³ãã³ãã®å®è¡ã«ã€ããŠè©±ããŸãã
ãã¡ãããUIäžã®å¯Ÿå¿ãããã¿ã³ã¯ãã®ç¶æ ã§ã¯è¡šç€ºãããŸããã ãã®ç¶æ ã§ã¯ããã¹ããã³ãã³ããåãåãã¹ãã§ã¯ãããŸããã å€åŽã®å±€ãšã·ã¹ãã ããããã®æ©èœãæ£åžžã«å®è¡ãããªãã°ãããã¯ãã¹ãŠæ¬åœã§ãã ãããããã¡ã€ã³ã³ã¢ã§ã¯ãå€éšå±€ã®ååšã«ã€ããŠç¥ãå¿ èŠã¯ãªãããããã®äœæ¥ã®æ£ç¢ºæ§ãä¿¡ããå¿ èŠããããŸããã·ã¹ãã ã®äžå€æ¡ä»¶ãä¿è·ããå¿ èŠããããŸãã
äžéšã®ãã§ãã¯ã¯ãæ€èšŒã¬ãã«ã§ã¢ããªã±ãŒã·ã§ã³ãµãŒãã¹ã«é 眮ã§ããŸãã ããããããã¯é²åŸ¡çãªããã°ã©ãã³ã°ã«å€ããå¯èœæ§ãããã極端ãªå Žåã«ã¯ä»¥äžã«ã€ãªãããŸãïŒ
- ç¹å®ã®äžå€æ¡ä»¶ãå€åŽã®å±€ã§æ€èšŒããå¿ èŠããããããã«ãã»ã«åã¯åŒ±ããããŸãã
- ãµããžã§ã¯ãé åã®ç¥èã¯å€åŽã®å±€ã«ãæµã蟌ã¿ãããã§ãã¯ã¯äž¡æ¹ã®å±€ã§è€è£œã§ããŸãã
- å€éšå±€ããã®ã³ãã³ãã®å®è¡ã®æ€èšŒã¯ããã¡ã€ã³ãªããžã§ã¯ããçŸåšã®ç¶æ ã§ã³ãã³ããå®è¡ã§ããªãããšãæ€èšŒãããããè€éã§ä¿¡é Œæ§ãäœãå ŽåããããŸãã
ãŸãããã®ãããªãã§ãã¯ãæ€èšŒã¬ã€ã€ãŒã«é 眮ããå ŽåããŠãŒã¶ãŒã«ãšã©ãŒã®çç±ãäŒããå¿ èŠããããŸãã çŸåšã®ç¶æ³ã§ã¯ãŸã£ããå®è¡ã§ããªãæäœã«ã€ããŠè©±ããŠããããã次ã®2ã€ã®ç¶æ³ã®ããããã«é¥ããªã¹ã¯ããããŸãã
- ãäºæããªããšã©ãŒãçºçããŸããããšããã¡ãã»ãŒãžã®ããã«ãæ®éã®ãŠãŒã¶ãŒã«ã¯ãŸã£ããç解ã§ããããšã«ãããµããŒãã«è¡ããšããã¡ãã»ãŒãžãäžããŸããã
- ç§ãã¡ã¯ã圌ãå®è¡ãããæäœãå®è¡ã§ãããä»ã®åé¿çãæ¢ãããšãã§ããçç±ãããããããã圢ã§æªåœ¹ã«äŒããŸããã
ããããèšäºã®ã¡ã€ã³ãããã¯ã«æ»ããŸãã ãã¹ãŠã®å åã«ãããè°è«äžã®ç¶æ³ã¯äŸå€çã§ãã ããã¯æ±ºããŠèµ·ããã¹ãã§ã¯ãããŸãããããããããªããããã¯æªãã§ãããã
ãã®ç¶æ³ã§ã¯ãäŸå€ãã¹ããŒããå¿ èŠãªè©³çŽ°ãèªçŽãããæäœã¯å®è¡ã§ããŸããããšããäžè¬åœ¢åŒã®ãšã©ãŒããŠãŒã¶ãŒã«è¿ãããã®ã¿ã€ãã®ãšã©ãŒã®ç£èŠãèšå®ãããããã衚瀺ãããªãããšãæåŸ ããã®ãæãè«ççã§ãã
ãã®å Žåã«äœ¿çšããäŸå€ã®ã¿ã€ãã¯äœã§ããïŒ è«ççã«ã¯ãããã¯å¥ã®ã¿ã€ãã®äŸå€ã§ããå¿ èŠããããŸããããã«ãããä»ã®äŸå€ãšåºå¥ã§ããå€éšå±€ããã®äŸå€åŠçã«ãã£ãŠèª€ã£ãŠãã£ãããããªãããã«ããããã§ãã éå±€ãå€ãã®äŸå€ãå¿ èŠãããŸãããæ¬è³ªã¯åãã§ã-åãå ¥ããããªãããšãèµ·ãããŸããã ãããžã§ã¯ãã§ã¯ããã®ããã«CorruptedInvariantExceptionåãäœæããé©åãªç¶æ³ã§äœ¿çšããŸãã
Webã¢ããªã±ãŒã·ã§ã³ã®ç¹æ®ãªã±ãŒã¹
ä»ã®Webã¢ããªã±ãŒã·ã§ã³ïŒãã¹ã¯ããããããŒã¢ã³ãWindowsãµãŒãã¹ãªã©ïŒãšã®å€§ããªéãã¯ãçæçãªæäœïŒHTTPãªã¯ãšã¹ãã®åŠçïŒã®åœ¢ã§ã®å€éšãšã®ããåãã§ãããã®åŸãã¢ããªã±ãŒã·ã§ã³ã¯çºçããããšãããã«ãå¿ãããŸãã
ãŸããèŠæ±ãåŠçããåŸãå¿çãåžžã«çæãããŸãã ã³ãŒãã«ãã£ãŠå®è¡ãããæäœãããŒã¿ãè¿ããªãå Žåã§ãããã©ãããã©ãŒã ã¯ã¹ããŒã¿ã¹ã³ãŒããå«ãå¿çãè¿ããŸãã æäœãäŸå€ã«ãã£ãŠäžæ¢ãããå Žåããã©ãããã©ãŒã ã¯å¯Ÿå¿ããã¹ããŒã¿ã¹ã³ãŒããå«ãå¿çãè¿ããŸãã
ãã®åäœãå®è£ ããããã«ãWebãã©ãããã©ãŒã ã§ã®ãªã¯ãšã¹ãåŠçã¯ãã€ãã©ã€ã³ïŒãã€ãïŒã®åœ¢åŒã§æ§ç¯ãããŸãã æåã«ãèŠæ±ãé çªã«åŠçããïŒèŠæ±ïŒã次ã«å¿çãæºåãããŸãã
ããã«ãŠã§ã¢ãã¢ã¯ã·ã§ã³ãã£ã«ã¿ãŒãhttpãã³ãã©ãŒãŸãã¯ISAPIãã£ã«ã¿ãŒïŒãã©ãããã©ãŒã ã«å¿ããŠïŒã䜿çšããä»»æã®æ®µéã§ãã®ãã€ãã©ã€ã³ã«çµ±åã§ããŸãã ãããŠããªã¯ãšã¹ãåŠçã®ã©ã®æ®µéã§ããåŠçãäžæããããšãã§ãããã€ãã©ã€ã³ã¯å¿çã圢æããããã«é²ã¿ãŸãã
ååãšããŠããã€ãã©ã€ã³ã¢ãŒããã¯ãã£ã«ã¢ããªã±ãŒã·ã§ã³ã®ããžãã¹éšåãå®è£ ããã®ã§ã¯ãªããæäœãé 次å®è¡ããã³ãŒããèšè¿°ããŸãã ãŸãããã®ã¢ãããŒãã§ã¯ããªã¯ãšã¹ãã®å®è¡ãäžæããŠããã«ã¬ã¹ãã³ã¹ã®åœ¢æã«é²ãå Žåãã·ããªãªãå®è£ ããã®ãå°ãé£ãããªããŸãã
ããã¯äŸå€åŠçãšäœã®é¢ä¿ãããã®ã§ããããïŒ
å®éããã®èšäºã®åã®éšåã§èª¬æããäŸå€ãåŠçããããã®èŠåã¯ããã®ã·ããªãªã«ããŸãé©åããŠããŸããã
äŸå€ã¯gotoã»ãã³ãã£ã¯ã¹ã§ããããã䜿çšããã®ã¯é©åã§ã¯ãããŸããã
Resultã®åºç¯ãªäœ¿çšã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®ã¬ã€ã€ãŒã«ãã©ãã°ïŒResultïŒãããšããäºå®ã«ã€ãªãããå¿çã圢æãããšãã«ãã©ã®ã¹ããŒã¿ã¹ã³ãŒããè¿ãããç解ããããã«ãäœããã®æ¹æ³ã§Resultã解æããå¿ èŠããããŸãã ãŸãããã®è§£æã³ãŒããäžè¬åããŠããã«ãŠã§ã¢ãŸãã¯ActionFilterã«ããã·ã¥ããããšããå§ãããŸããããã¯å¥ã®åéºã«ãªããŸãã ã€ãŸããResultã¯äŸå€ãããã¯ããã«åªãããã®ã§ã¯ãããŸããã
ãã®ãããªç¶æ³ã§äœããã¹ããïŒ
絶察ãã«ãããªãã§ãã ããã ç§ãã¡ã¯ãèªåã®å©çã®ããã«ã«ãŒã«ãèšå®ããŸãã
ç¶ç¶ã§ããªãããã«æäœãäžæ¢ãããå ŽåãäŸå€ãã¹ããŒããŠãgotoã»ãã³ãã£ã¯ã¹ã¯ãããŸããã å®è¡ã¯åºå£ã«åããããããžãã¹ã³ãŒãã®å¥ã®ãããã¯ã«ã¯åããããŸããã
ç®çã®ã¹ããŒã¿ã¹ã³ãŒãã決å®ããããã«äžæã®çç±ãéèŠãªå Žåã¯ãã«ã¹ã¿ã äŸå€ã¿ã€ãã䜿çšã§ããŸãã
åã«ã䜿çšãã2ã€ã®ã«ã¹ã¿ã ã¿ã€ããItemNotFoundExceptionïŒ404ã«å€æïŒãšCorruptedInvariantïŒ500ã«å€æïŒã«ã€ããŠèª¬æããŸããã
ãŠãŒã¶ãŒãããŒã«ã¢ãã«ãŸãã¯ã¯ã¬ãŒã ã«è©²åœããªãããããŠãŒã¶ãŒã®æš©å©ã確èªããå Žåã¯ãã«ã¹ã¿ã ForbiddenExceptionïŒã¹ããŒã¿ã¹ã³ãŒã403ïŒãäœæããããšãã§ããŸãã
ãããŠæåŸã«ãæ€èšŒã ãŠãŒã¶ãŒããªã¯ãšã¹ããå€æŽãããŸã§äœãã§ããŸããããã®ã»ãã³ãã£ã¯ã¹ã¯ã³ãŒã422ã§èšè¿°ãããŠããŸã ã ãã®ãããæäœãäžæãããªã¯ãšã¹ããçŽæ¥åºå£ã«éä¿¡ããŸãã ããã¯ãäŸå€ã䜿çšããŠè¡ãããšãã§ããŸãã ããšãã°ã FluentValidationã©ã€ãã©ãªã«ã¯ãèŠæ±ã®åé¡ããŠãŒã¶ãŒã«æ確ã«è¡šç€ºããããã«å¿ èŠãªãã¹ãŠã®è©³çŽ°ãã¯ã©ã€ã¢ã³ãã«æž¡ãçµã¿èŸŒã¿åã®äŸå€ãæ¢ã«ãããŸãã
以äžã§ãã äŸå€ãã©ã®ããã«åŠçããŸããïŒ