ãã®èšäºã®åã«ããããã¿ã€ãã翻蚳ããŸãã- ãã¡ããã芧ãã ãã ã ãã®èšäºã§èª¬æããããããããã¯ããã®èšäºã®æ çµã¿ã®äžã§ç©æ¥µçã«äœ¿çšãããã®ã§ãããããå§ããæ¹ãè¯ãã§ããã...ãã¡ããããŸã èªãã§ããªããªãã
æåã®èšäºãšã¯ç°ãªãããšã³ãã£ãã£ã®ä»£ããã«ãã¡ã€ã³ãå éšå±€ã®ååã«è¡šç€ºãããŸãã翻蚳ã§ã¯ãæ··ä¹±ãé¿ããããã«ãã®çšèªãæ®ããŸããã ç§ã®æèŠã§ã¯ããã®çšèªã¯ããåºãæå³ãæã£ãŠããã®ã§ãç§ã¯Domainã DomainãšããŠç¿»èš³ããŸããã
ãã®ããŒãã§ã¯ãäžè¬çãªæŠå¿µã説æããå åŽã®ã¬ã€ã€ãŒã䜿çšããŸãã
ç§ã®æèŠã§ã¯ãäŸåæ§ã«ãŒã«ã¯ããœãããŠã§ã¢ã®éçºæã«é©çšãã¹ãæãéèŠãªã«ãŒã«ã®1ã€ã§ãããã¹ãããããã·ã¹ãã ãååŸãããå Žåããã¬ãŒã ã¯ãŒã¯ãUIããŸãã¯ããŒã¿ããŒã¹ã«äŸåããŸããã ãã®èŠåã«åŸããšãæçµçã«ã¯ã·ã¹ãã ã³ã³ããŒãã³ãã®æ¥ç¶æ§ãäœäžãã責任ãæ確ã«åé¢ãããŸãã
ççµåã·ã¹ãã
ãã¹ãå¯èœãªéšåãšåŒ±ãçžäºæ¥ç¶ãããã³ã³ããŒãã³ãã§æ§æãããã·ã¹ãã ã¯ãåé¡ãªãæ¡åŒµã§ããç解ãå€æŽãæ¡åŒµãã¹ã±ãŒãªã³ã°ãééçã«è¡ããŸãã äŸåé¢ä¿ã«ãŒã«ãé©çšããéã«ããããã®å質ã®çºçŸãå®èšŒããããšããŸãã
ãããè¡ãããã«ããã¯ãªãŒã³ã¢ãŒããã¯ãã£ãã®æŠå¿µããã€ãã©ã®ããã«é©çšãã¹ãããåæã«è°è«ãããã·ã³ãã«ã§ãããªããæ¬æ ŒçãªGoã¢ããªã±ãŒã·ã§ã³ãå®è£ ããŸãã
ãã®ã¢ããªã±ãŒã·ã§ã³ã¯ã¹ãã¢ã®æå°ããŒãžã§ã³ã§ããã泚æã«é¢é£ãã補åã®ãªã¹ããHTTPãªã¯ãšã¹ãã§åãåãããšãã§ããŸãã
ããã€ãã®ãã¹ãã«ãã¬ããžãå«ããœãŒã¹ã³ãŒãã¯githubã«ãããŸãã
ãœãŒã¹ã³ãŒããç解ããããããããã«ã補åã®è¡šç€ºã泚æãæ¯æããªã©ã®ä»ã®ã·ããªãªã¯å®è£ ããŸããã ããã«ãã¢ãŒããã¯ãã£ã®æ¬è³ªã説æããã®ã«åœ¹ç«ã€ã³ãŒãéšåã®å®è£ ã«çŠç¹ãåœãŠãŸããããããã£ãŠãå®å šãªãšã©ãŒåŠçãªã©ãã³ãŒãã«ã¯ä»ã®å€ãã®èŠçŽ ãæ¬ ããŠããŸãã ãŸããå€ãã®åé·æ§ãå«ãŸããŠããŸãããååŸã«ãžã£ã³ãããããšãªããã³ãŒããäžããäžã«èªãããšãã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã¢ãŒããã¯ãã£
ãŸããã¢ããªã±ãŒã·ã§ã³ã®ããŸããŸãªé åãšãã¢ãŒããã¯ãã£å ã§ã®ãããã®å ŽæãåæããŸãã ã¢ããªã±ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ã¯ã Domain ã Scripts ã Interfacesããã³Infrastructureã® 4ã€ã®ã¬ã€ã€ãŒã«åå²ãããŸãã æãå åŽã®å±€ããå§ããŠãåå±€ãé«ã¬ãã«ã®äœçœ®ãã説æããŸãã 次ã«ãåã¬ã€ã€ãŒã®äœã¬ãã«ã®å®è£ ãèŠãŠãå åŽã®ã¬ã€ã€ãŒããå€åŽã®ã¬ã€ã€ãŒã«ç§»åããŸãã
ç§ãã¡ã®ã¢ããªã±ãŒã·ã§ã³ã®ãã¡ã€ã³ ããŸãã¯ããžãã¹-人ã ã¯è³Œå ¥ã®ããã«ããŸãã¯ããæ£åŒãªæ¹æ³ã§åºã«æ¥ãŸãã顧客ã¯æ³šæã«ååãè¿œå ããŸãã ãããã®ããžãã¹ãªããžã§ã¯ããšãã®ã«ãŒã«ããå éšå±€ããã¡ã€ã³å±€ã®ã³ãŒããšããŠæ瀺ããå¿ èŠããããŸãã
äœãå ¥ããŠããªã
ãŠãŒã¶ãŒã«ã€ããŠã§ã¯ãªãã顧客ã«ã€ããŠè©±ãããšã«ããŸããã ç§ãã¡ã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯ç¢ºãã«ãŠãŒã¶ãŒãããŸãããã¢ããªã±ãŒã·ã§ã³ãã¡ã€ã³ã«ã€ããŠè©±ããšãããŠãŒã¶ãŒã¯é¢å¿ãæã¡ãŸããã 責任åæ ãçå£ã«åãæ¢ãããã®ã§ããã°ãããŠãŒã¶ãŒãã¯ã·ããªãªãæ±ããããžãã¹ãã®ãã®ãæ±ãã®ã§ã¯ãªãã®ã§ãããŠãŒã¶ãŒããã©ã®ã¬ã€ã€ãŒã«å ¥ããããéåžžã«æ£ç¢ºã«èããå¿ èŠããããšæããŸãã
åœç¶ã®ããšãªããããœãããŠã§ã¢éçºè ãšããŠããœãããŠã§ã¢åœ¢åŒã®èŠ³ç¹ããç©äºãèŠãããšã«æ £ããŠããŸãã ãããã£ãŠãã¢ãŒããã¯ãã£ãè°è«ããéãããã€ãã®äžå¿«ãªåŸ®åŠãã«ãããã¹ãé¿ããããã«ãç§ã¯ã³ã³ãã¥ãŒã¿ã«é¢ããæ¯phorãé¿ããããšããŸãã ããžãã¹ãã¡ã€ã³ãããã°ã©ã ã®äžéšã§ã¯ãªããããšãã°ããŒãã²ãŒã ã®äžéšã§ãããšæ³åãããã©ãã§ããããã
ããŒãã²ãŒã ãšããŠeBayãŸãã¯Amazonãå®è£ ããå¿ èŠããããšæ³åããŠãã ããã eBayãµã€ããšeBayããŒãã²ãŒã ã«ã¯ãè²·ãæã売ãæã補åãå ¥æãå¿ èŠã§ããããŠãŒã¶ãŒãã»ãã·ã§ã³ãCookieãèªèšŒãªã©ãå¿ èŠãªã®ã¯eBayãµã€ãã ãã§ãã
ããã°ã©ã ãå°ããå ŽåããŠãŒã¶ãŒãšé¡§å®¢ãåäžã§ãããšãã決å®ã¯å€§ããããšã§ã¯ãªãããã«èŠãããããããã¯ããªã埮åŠãªéãã§ãã ããããããã¯åŸã§ä¿®æ£ããã®ãé£ãããã®ã®1ã€ã§ãã ãã®çç±ã¯ã99ïŒ ã®ç¶æ³ã§ããŠãŒã¶ãŒãšé¡§å®¢ãåãã§ãããšããä»®å®ã¯ãæ®ãã®1ïŒ ãäœçšãããŸã§ãŸã£ããæå³ããªããšããããšã§ãã ãã®ç¶æ³ãã¢ããªã±ãŒã·ã§ã³ã§èª¬æããŸãã
ãããã£ãŠã泚æãšååã¯ãã¡ã€ã³å±€ã«å±ããŸããããŠãŒã¶ãŒã¯æ¬¡ã®å±€-ã¹ã¯ãªããã«å±ããŸãã
ã¹ã¯ãªããã¬ã€ã€ãŒã«å±ããä»ã®ãã®ã¯äœã§ããïŒ ã·ããªãªã¯ãã¢ããªã±ãŒã·ã§ã³ãŠãŒã¶ãŒãããŒã¹ãã¡ã€ã³ã®ãµããžã§ã¯ãã§ãäœãããããå¿ èŠãããããã«çºçãããŠãŒã¹ã±ãŒã¹ãå®çŸãããå±€ã§ãã ãŠãŒã¹ã±ãŒã¹ã®äŸã¯ã顧客ã泚æã«ååãè¿œå ãããã§ãããã ãã®ãŠãŒã¹ã±ãŒã¹ããã³ãã®ä»ã®ãŠãŒã¹ã±ãŒã¹ãå®è£ ããã«ã¯ãããžãã¹ãšã³ãã£ãã£ããèµ·åãããã¡ãœãããå®è£ ããå¿ èŠããããŸãã
ããã¯ãã¡ã€ã³å±€ã§å®è£ ã§ããŸãããã¹ã¯ãªããã§ãããè¡ãããšããå§ãããŸãã ãã®äž»ãªçç±ã¯ãã¹ã¯ãªããã¯ã¢ããªã±ãŒã·ã§ã³åºæã§ããããã¡ã€ã³ãšã³ãã£ãã£ã¯ããã§ã¯ãªãããã§ãã 2ã€ã®ã¢ããªã±ãŒã·ã§ã³ãæ³åããŠãã ããã1ã€ã¯é¡§å®¢ãç©ã衚瀺ããŠè³Œå ¥ã§ãããã®ããã1ã€ã¯ç®¡çè ã泚æã®ç®¡çãšå®è¡ã«äœ¿çšãããã®ã§ãã ãã¡ã€ã³ã®ãšã³ãã£ãã£ã¯äž¡æ¹ã®ã¢ããªã±ãŒã·ã§ã³ã§åããŸãŸã§ããã䜿çšã·ããªãªã¯éåžžã«ç°ãªããŸãïŒã泚æã«è£œåãè¿œå ããããšã泚æãé ä¿¡æžã¿ãšããŠããŒã¯ãããã ãã¡ã€ã³å±€ãšã¹ã¯ãªããå±€ã¯äžç·ã«ãªã£ãŠã¢ããªã±ãŒã·ã§ã³ã®ã³ã¢ã圢æããé£æºããããžãã¹ã®çŸå®ãè¡šããŸãã ãã以å€ã¯ãã¹ãŠãå®è£ ã®è©³çŽ°ã§ãããããžãã¹ã®æ©èœãšã¯é¢ä¿ãããŸããã ã¹ãã¢ã¯ãWebãµã€ããŸãã¯ãã¹ã¯ãããã¢ããªã±ãŒã·ã§ã³ãšããŠå®è£ ã§ããŸã-ãã¡ã€ã³ãšã³ãã£ãã£ãšãã®äœ¿çšã·ããªãªã«è§Šããªãéããããã¯åãããžãã¹æåã®ã¢ããªã±ãŒã·ã§ã³ã§ãã
WebãµãŒãã¹ãHTTPããSPDYã«ããŸãã¯ããŒã¿ããŒã¹ãMySQLããOracleã«åãæ¿ããããšãã§ããŸã-ããã«ãããååïŒãã¡ã€ã³ïŒã§æ§æããã顧客ãšã泚æãäœæããæ°éãå€æŽã§ãã顧客ããããšããäºå®ã¯å€ãããŸããååãšæ¯æããªãã·ã§ã³ïŒã·ããªãªïŒ
åæã«ãããã¯å éšã¬ã€ã€ãŒã®ãªããã¹ãã¹ãã§ããMySQLããOracleã«åãæ¿ãããšãã«å°ãªããšã1è¡ã®ã³ãŒããå€æŽããå¿ èŠããããŸããïŒ
çãããã¯ããã®å Žåãå åŽã®å±€ã®äžéšãå€åŽã®å±€ã®è©³çŽ°ã«äŸåããããã«ãäŸåé¢ä¿ã®èŠåã«éåããŸããã
ãŸããããŒã¿ããŒã¹ãšé£æºããããHTTPãªã¯ãšã¹ããå€éšãµãŒãã¹ãåŠçãããããã³ãŒãçšã®å ŽæããããŸãã ãã®å Žæã¯ã€ã³ã¿ãŒãã§ãŒã¹ã®ã¬ã€ã€ãŒã§ãã
ããšãã°ãã¢ããªã±ãŒã·ã§ã³ãWebãµã€ããšããŠäœ¿çšå¯èœã«ãªã£ãå ŽåãHTTPãµãŒããŒãšã¢ããªã±ãŒã·ã§ã³ã¬ã€ã€ãŒéã®ã€ã³ã¿ãŒãã§ã€ã¹ã圢æãããããçä¿¡HTTPèŠæ±ãåŠçããã³ã³ãããŒã©ãŒã¯ã€ã³ã¿ãŒãã§ã€ã¹ã¬ã€ã€ãŒã«é 眮ãããŸãã å€éšããã®ãããã®ã€ãã³ã-ããªã¬ãŒãããHTTPãªã¯ãšã¹ããUIã§ã®ããŠã¹ã¯ãªãã¯ããŸãã¯ãªã¢ãŒãããã·ãŒãžã£ã³ãŒã«-ã¯ãã¢ããªã±ãŒã·ã§ã³ã§ã¢ã¯ãã£ããã£ãäœæããŸãã ãããããªããã°ãã¹ã¯ãªããã¡ãœãããšãã¡ã€ã³ãšã³ãã£ãã£ã¯ç¡é§ã«ãªããŸãã ããããå åŽã®å±€ã®èŠçŽ ã¯å€åŽã®äžçãšçžäºäœçšïŒããã³äžè¬çã«ã¯èªèïŒã§ããªããããå€åŽã®äžçããã®ã€ãã³ããå åŽã®å±€ã®ã¢ã¯ã·ã§ã³ã«å€æããã«ã¯ã€ã³ã¿ãŒãã§ãŒã¹ãå¿ èŠã§ãã
ã¹ãã¢ããŒã¿ïŒããŒã¿ããŒã¹å ã®ååã泚æããŠãŒã¶ãŒïŒãä¿åããå Žåã¯ãããŒã¿ããŒã¹ãžã®ã€ã³ã¿ãŒãã§ã€ã¹ãå¿ èŠã§ãã äŸåæ§ã«ãŒã«ã®é©çšãç¹ã«èå³æ·±ãã®ã¯ããã§ããSQLã³ãŒããInterfacesã¬ã€ã€ãŒã«ååšããåæã«å åŽã®ã¬ã€ã€ãŒããå€åŽã®ã¬ã€ã€ãŒãåŒã³åºãããšãã§ããªãå Žåãä¿åã¯ã¹ã¯ãªããã¬ãã«ã§åæåãããŸããäŸåã«ãŒã«ïŒ ã³ãŒãã®å®è£ ã«ããè¿ããšããã§ãããã詳现ã«åæããŸãã
æåŸã®å±€ã¯ã€ã³ãã©ã¹ãã©ã¯ãã£ãšåŒã°ããŸãã ã€ã³ãã©ã¹ãã©ã¯ãã£ã«å±ãããã®ãšã€ã³ã¿ãŒãã§ã€ã¹ã«å±ãããã®ã®åé¢ã¯å¿ ããã容æã§ã¯ãããŸããã ããšãã°ãäž¡æ¹ã®ã¬ã€ã€ãŒã«ã¯ãããŒã¿ããŒã¹ãšéä¿¡ããã³ãŒããªã©ãå€ã®äžçãšçžäºäœçšããã³ãŒããå«ãŸããŠããŸãã ããã§ã®æ±ºå®èŠå ã¯ãã€ã³ã¿ãŒãã§ã€ã¹ã³ãŒããããã°ã©ã ã«åºæã§ãããã€ã³ãã©ã¹ãã©ã¯ãã£ã³ãŒãããŸã£ããç°ãªãããããŸã£ããç°ãªãã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšã§ããããšã§ãã ããšãã°ãã¢ããªã±ãŒã·ã§ã³ã§HTTPãªã¯ãšã¹ããåŠçããé¢æ°ã¯ããã®ã¢ããªã±ãŒã·ã§ã³ã®ãã¬ãŒã ã¯ãŒã¯å ã§ã®ã¿æå³ããããHTTPãæäœããããã®æšæºã®Goã©ã€ãã©ãªã¯æ±çšã³ãŒãã§ãããä»ã®ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšã§ããŸãã ãã®æå³ã§ãæšæºã®Goã©ã€ãã©ãªã®ã»ãšãã©ã¯ãæŠå¿µçã«ã¯ã€ã³ãã©ã¹ãã©ã¯ãã£ã¬ã€ã€ãŒã«ãããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®ã¬ã€ã€ãŒãšããŒãã®ãªã¹ããäœæããããã«ç·ãåŒããŸãããïŒ
ãã¡ã€ã³ïŒ
- 顧客ã®æ¬è³ª
- 補åã®æ¬è³ª
- ãšã³ãã£ãã£ã®é åº
ã·ããªãªïŒ
- ãŠãŒã¶ãŒãšã³ãã£ãã£
- ã·ããªãªïŒæ³šæã«è£œåãè¿œå ãã
- ã·ããªãªïŒæ³šæã¢ã€ãã ã®ãªã¹ããååŸãã
- ã·ããªãªïŒç®¡çè ã補åã泚æã«è¿œå ããŸã
ã€ã³ã¿ãŒãã§ãŒã¹ïŒ
- 補å/泚æåŠççšã®WebãµãŒãã¹
- ã¹ã¯ãªããããã³ãã¡ã€ã³ãšã³ãã£ãã£ã®ãªããžããª
ã€ã³ãã©
- ããŒã¿ããŒã¹
- ããŒã¿ããŒã¹æ¥ç¶ãåŠçããã³ãŒã
- HTTPãµãŒããŒ
- Goæšæºã©ã€ãã©ãª
ã芧ã®ããã«ããã®ãªã¹ãã«ã¯ãŸã 説æããŠããªãèŠçŽ ãå«ãŸããŠããŸã-å®è£ ã«ã€ããŠèª¬æãããšãã«ã管çã¹ã¯ãªãããšãªããžããªã詳现ã«èª¿ã¹ãŸãã
ãããŠãã³ãŒããæãäžããåã®æåŸã®èãã ã¢ããªã±ãŒã·ã§ã³ã®åå²æ¹æ³ãèŠããšãç¹å®ã®ãã³ãã¬ãŒãã匷調衚瀺ãããŸãã ã¬ã€ã€ãŒãèŠãŠãããžãã¹äŸåã³ãŒããšã¢ããªã±ãŒã·ã§ã³åºæã³ãŒãã®2ã€ã®æ¹æ³ã§ã¬ã€ã€ãŒãå解ããããšãããšã次ã®å³ã衚瀺ãããŸãã
ã€ã³ãã© | ã€ã³ã¿ãŒãã§ãŒã¹ | ã·ããªãª | ãã¡ã€ã³ |
---|---|---|---|
ã¢ããªã±ãŒã·ã§ã³ã«äŸåããªã | ã¢ããªã±ãŒã·ã§ã³åºæ | ã¢ããªã±ãŒã·ã§ã³åºæ | ã¢ããªã±ãŒã·ã§ã³ã«äŸåããªã |
ç¬ç«ããäŒæ¥ | ç¬ç«ããäŒæ¥ | ããžãã¹åºæ | ããžãã¹åºæ |
ããšãã°ãããããã³ãŒãã¯ã¢ããªã±ãŒã·ã§ã³ã«äŸåããªãã³ãŒãã§ãããããžãã¹ã¯ã€ã³ãã©ã¹ãã©ã¯ãã£å±€ã«å®è£ ããå¿ èŠãããããšãããããŸãã
å·Šã«ç§»åããã»ã©ã³ãŒããäœããªãïŒã80çªç®ã®ããŒãã«ãã€ãã¹ããªãŒã ã転éãããïŒãå³ã«ç§»åããã»ã©ã³ãŒããé«ããªããŸãïŒã泚æã«ååãè¿œå ãããïŒã
å®è£
ãã¡ã€ã³
ãŸãããã¡ã€ã³ã¬ã€ã€ãŒãå®è£ ããŸãã åè¿°ã®ããã«ãã¢ããªã±ãŒã·ã§ã³ã¯å®å šã«æ©èœããŸãããåæã«å®å šãªã¹ãã¢ã«ãªãããšã¯ãããŸããã ãããã£ãŠããã¡ã€ã³ãå®è£ ããã³ãŒãã¯ååã«çããªããåäžã®ãã¡ã€ã«ã«å®è£ ããŸãã
// $GOPATH/src/domain/domain.go package domain import ( "errors" ) type CustomerRepository interface { Store(customer Customer) FindById(id int) Customer } type ItemRepository interface { Store(item Item) FindById(id int) Item } type OrderRepository interface { Store(order Order) FindById(id int) Order } type Customer struct { Id int Name string } type Item struct { Id int Name string Value float64 Available bool } type Order struct { Id int Customer Customer Items []Item } func (order *Order) Add(item Item) error { if !item.Available { return errors.New("Cannot add unavailable items to order") } if order.value()+item.Value > 250.00 { return errors.New(`An order may not exceed a total value of $250.00`) } order.Items = append(order.Items, item) return nil } func (order *Order) value() float64 { sum := 0.0 for i := range order.Items { sum = sum + order.Items[i].Value } return sum }
ãã®ã³ãŒããäŸåé¢ä¿ã«éèŠãªãã®ãæããªãããšã¯ããã«æããã§ããäžéšã®ã¡ãœããããšã©ãŒãè¿ããããããšã©ãŒãããã±ãŒãžã®ã¿ãã€ã³ããŒãããŸããã ããã§èª¬æãããã¡ã€ã³ãšã³ãã£ãã£ã¯æçµçã«ããŒã¿ããŒã¹å ã®æååã«ãªããŸããããã®ã¬ã€ã€ãŒã«ã¯ããŒã¿ããŒã¹ã«é¢é£ä»ããããã³ãŒãã¯ãããŸããã
代ããã«ã3ã€ã®ãããããªããžããªãŒã®Goã€ã³ã¿ãŒãã§ãŒã¹ãå®çŸ©ããŸãã ãªããžããªã¯DDDïŒDomain Driven DesignïŒã®æŠå¿µã§ããæ°žç¶ã¹ãã¬ãŒãžãæäœããäœããã®ã¡ã«ããºã ã§ãšã³ãã£ãã£ãä¿åãŸãã¯ååŸããå¿ èŠããããšããäºå®ããã®æœè±¡åã®æ¹æ³ã§ãã ãã¡ã€ã³ã®èŠ³ç¹ããèŠããšããªããžããªã¯åã«ãã¡ã€ã³ãšã³ãã£ãã£ãååŸïŒFindByIdïŒãŸãã¯æ ŒçŽïŒã¹ãã¢ïŒãããã³ã³ããã§ãã
CustomerRepositoryãItemRepositoryãOrderRepositoryã¯åãªãã€ã³ã¿ãŒãã§ã€ã¹ã§ãã ããŒã¿ããŒã¹ãšã¢ããªã±ãŒã·ã§ã³éã®ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ããããããããã¯Interfacesã¬ã€ã€ãŒã®äžéšãšããŠå®è£ ãããŸãã ããããäŸåé¢ä¿ã«ãŒã«ãGoã¢ããªã±ãŒã·ã§ã³ã«å®è£ ããæ¹æ³ã§ããããã¯ãå€åŽã®ã¬ã€ã€ãŒã«ã¯äœãé©çšãããå åŽã®ã¬ã€ã€ãŒã«ã¯å®çŸ©ããªãæœè±¡çãªã€ã³ã¿ãŒãã§ã€ã¹ã§ãã ãã®å®è£ ã¯å€åŽã®å±€ã§æ±ºå®ãããŸãã ã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£ ã¯ãã®å±€ã§è¡ãããåŸã§äœ¿çšããå¿ èŠããããŸãã ããã¯ãåŸã§Scriptsã¬ã€ã€ãŒã«å°éãããšãã«è¡šç€ºãããŸãã
ãããã£ãŠãã¹ã¯ãªããã¬ã€ã€ãŒã¯ããã¡ã€ã³ã¬ã€ã€ãŒã®æŠå¿µããªããžããªãéããŠåç §ã§ããŸããããã¡ã€ã³ã¬ã€ã€ãŒã§ã¯çŽç²ãªGoã®ã¿ã䜿çšããŸãã ãã ããå®éã«ã¯ãã³ãŒãã¯Interfacesã¬ã€ã€ãŒã§å®è¡ãããŸãã
åå±€ã®åéšåã«ã¯ã3ã€ã®è³ªåããããŸããããã¯ã©ãã§äœ¿çšããããã®ã€ã³ã¿ãŒãã§ãŒã¹ã¯ã©ãã«ãå®è£ ã¯ã©ãã«ãããŸããïŒ
OrderRepositoryãèŠããšãçãã¯æ¬¡ã®ããã«ãªããŸããã¹ã¯ãªããã¬ã€ã€ãŒã§äœ¿çšããããã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãã¡ã€ã³ã¬ã€ã€ãŒã«å±ãããã®å®è£ ã¯ã€ã³ã¿ãŒãã§ã€ã¹ã¬ã€ã€ãŒã«å±ããŸãã
äžæ¹ãOrderãšã³ãã£ãã£ã®Addã¡ãœããã¯Scriptsã¬ã€ã€ãŒã§ã䜿çšãããå®éã«ã¯Domainã¬ã€ã€ãŒãžã®ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã ãã ãããã®ã¡ãœããã¯ãã以å€ã®èŠçŽ ãå®éã«å¿ èŠãšããªãããããã®å®è£ ã¯ãã¡ã€ã³å±€ã§å®è¡ãããŸãã
ãŸãã次ã®3ã€ã®æ§é ãå®çŸ©ããŸãïŒé¡§å®¢ïŒé¡§å®¢ïŒã泚æïŒæ³šæïŒãã¢ã€ãã ïŒè£œåïŒã ããã¯ã3ã€ã®ãã¡ã€ã³ãšã³ãã£ãã£ãè¡šããŠããŸãã Orderãšã³ãã£ãã£ã2ã€ã®Addã¡ãœãããšvalueã¡ãœããã«ãã£ãŠå®è£ ãããvalueã¯å éšäœ¿çšå°çšã®è£å©é¢æ°ã§ãã Addã¡ãœããã¯ãã¹ã¯ãªããå±€ã§ã®äœ¿çšã«å¿ èŠãªããžãã¹åºæã®æ©èœãå®è£ ããŸãã
ãŸãããã®ã³ãŒãã«ã¯ãã¢ãŒããã¯ãã£å šäœã«é¢ããŠéèŠãªè¿œå ã®è©³çŽ°ããããŸãã ã芧ã®ãšãããã¢ããªã±ãŒã·ã§ã³ã«ã¯ããŸããŸãªå Žæã«ããã€ãã®ã«ãŒã«ããããã©ã®ã«ãŒã«ãã©ã®ã«ãŒã«ã«å±ããã®ããè°è«ããå¿ èŠããããŸãã
æåã®ã«ãŒã«ã¯ãå©çšã§ããªãååã®é åºã«å ããŠå®çŸ©ããŸã-ããã¯æããã«ããžãã¹ã«ãŒã«ã§ãã 顧客ãã¢ã¯ã»ã¹ã§ããªãååã泚æã«è¿œå ããªãããã«ããããšã¯ããªã³ã©ã€ã³ã¹ãã¢ã§æ³šæããå Žåãããšãã°é»è©±ã§ãªãã¬ãŒã¿ãŒãéããŠæ³šæããå Žåã«é©çšãããã«ãŒã«ã§ãã ãã®ã«ãŒã«ã¯ã¢ããªã±ãŒã·ã§ã³åºæã§ã¯ãªããããžãã¹èŠä»¶ã§ãã
泚æã250ãã«ã®åèšè²»çšãè¶ ããããšã¯ã§ããªããšããã«ãŒã«ã«ã€ããŠãåãããšãèšããŸããã¹ãã¢ããŠã§ããµã€ãã§ãããããŒãã²ãŒã ã§ãããã¯é¢ä¿ãããŸãããããã¯åžžã«é©çšãããããžãã¹ã«ãŒã«ã§ãã
ä»ã®ã«ãŒã«ã¯ä»ã®å Žæã§å®çŸ©ãããŠããŸãã ããšãã°ãååã®ã³ã¹ããããŒã¿ããŒã¹ã«ä¿åãããã£ãŒã«ãã¿ã€ããæµ®åã«ããå¿ èŠããããŸãããããã¯ããžãã¹ã«ãŒã«ã§ã¯ãªãæè¡çãªã«ãŒã«ã§ããããã¡ã€ã³ã¬ã€ã€ãŒã«å±ããŠããŸããã
äžæ¹ã泚æãä¿åãããšãã®ããŒã¿ããŒã¹ãžã®ã€ã³ã¿ãŒãã§ã€ã¹ã®ã³ãŒãã¯ã250ç±³ãã«ãè¶ ãã泚æãå®å šã«ä¿åã§ããŸããããã¯ãããžãã¹ã«ãŒã«ã«èµ·å ããå¶éã§ãããããŒã¿ããŒã¹ãžã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãã®ãããªããšãå¿é ããå¿ èŠããªãããã§ãã ãã®äŸã¯ãããããããã®ååã倧奜ããªçç±ã®çŽ æŽãããäŸã§ãã250ãã«ã®æ³šæå¶éãããŒã¿ããŒã¹ã®ã¹ãã¢ãããã·ãŒãžã£ã«å®è£ ãããŠããããšãæ³åããŠãã ããã æéãçµã€ã«ã€ããŠããããã®ã«ãŒã«ã¯ããŸããŸãªå Žæã«åºãããã¢ããªã±ãŒã·ã§ã³ã倧ãããªãã»ã©ãç¶æãé£ãããªããŸãã åžžã«ãã¹ãŠã®ããžãã¹ã«ãŒã«ã1ãæã«ãŸãšããããšã奜ã¿ãŸãã
次ã®éšåã«ç¶ããŸãã