- ãŠãŒã¶ãšã®çžäºäœçšã®å¢çãšãªãå±€
- ã¢ããªã±ãŒã·ã§ã³å±€ã®äžéšãªã®ãå¥åã®ã¬ã€ã€ãªã®ã諞説ãã
- ãŠãŒã¶ãŒã«æ å ±ãæ瀺ããŠããŠãŒã¶ãŒã®æäœãã³ãã³ãã®è§£éãæ ãã¬ã€ã€ãŒã DDDã§ã¯ããã®ã¬ã€ã€ãŒã«ããžãã¹ããžãã¯ãçµã蟌ãããšãç®èã蟌ããŠãå©å£ãªUIããšããã¢ã³ããã¿ãŒã³ãšããŠãããé¿ããã¹ããã¿ãŒã³ã§ããã
- ãã¡ã€ã³ãªããžã§ã¯ããæäœããããšã§ããœãããŠã§ã¢ãæããã¹ãä»äºãå®çŸããå±€
- ã¢ããªã±ãŒã·ã§ã³ãè¡ãããšã«ãªã£ãŠããä»äºïŒãŠãŒã¹ã±ãŒã¹ïŒãå®çŸ©ãããã®ä»äºããã¡ã€ã³ã¬ã€ã€ãŒã®ãªããžã§ã¯ãã解決ããããã«ææ®ïŒorchestrateïŒããã¬ã€ã€ãŒããã®ã¬ã€ã€ãŒãããžãã¹ããžãã¯ã¯å«ãŸããå®éã®åŠçã¯ãã¡ã€ã³ã¬ã€ã€ãŒã«å§è²ããŠèª¿æŽåœ¹ãæ ãã
- ããžãã¹äžã®æŠå¿µãè¡šçŸããå±€
- ããžãã¹ã®æŠå¿µãšãããžãã¹ã«ãŒã«ããã³ããžãã¹ã眮ãããç¶æ³ã«é¢ããæ å ±ãè¡šçŸããã¬ã€ã€ãŒããã®ã¬ã€ã€ãŒãã¢ããªã±ãŒã·ã§ã³ã®æ žå¿ãšãªãã¬ã€ã€ãŒã§ãã¢ãã«ãæ¯ã¥ãå Žæã§ãããäœããæè¡çãªé¢å¿äºã«ã€ããŠã®å®è£ ã¯ã€ã³ãã©ã¹ãã©ã¯ãã£ã¬ã€ã€ãŒã«å§è²ããã
-
äžã®3å±€ãæ¯ããæè¡çãªåºç€ãšãªãå±€
-
æ°žç¶åã ã¡ãã»ãŒãžã³ã°ããã®ã³ã°ç
-
ã¡ãã»ãŒãžã³ã°ã«ã¯ãéä¿¡ãããã³ã«ã«ãã£ãŠçš®é¡ããããïŒHTTPãUDPãAMQPãFTPãªã©ãïŒ
-
äžè¿°ã®ã¬ã€ã€ãŒãæ¯ããäžè¬çãªæè¡çæ©èœãæäŸããã¬ã€ã€ãŒãããŒã¿ã®æ°žç¶åã«é¢ããæè¡çãªæ©èœïŒãã©ã³ã¶ã¯ã·ã§ã³ç®¡çãO/RããããŒïŒãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®ã¬ã³ããªã³ã°æ©èœãªã©ã該åœããã
-
ã¯ã©ã¹ããã¡ã€ã³å±€ã«çœ®ãã¹ãããã€ã³ãã©ã¹ãã©ã¯ãã£å±€ã«çœ®ãã¹ãããå€æããåºæºã¯ããã¡ã€ã³å±€ã®ã¯ã©ã¹ã«äŸåããå Žåã¯ãã¡ã€ã³å±€ãžããã¡ã€ã³å±€ã«äŸåããªãå Žåã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£å±€ã«çœ®ãã¹ãïŒ
https://www.ogis-ri.co.jp/otc/hiroba/technical/DDDEssence/chap2.html http://www.shigemk2.com/entry/reactive_shinjuku_domain_event http://enterprisegeeks.hatenablog.com/entry/2016/07/25/081127
-
ãªããžã§ã¯ãã®äžã«ã¯ãã¢ã€ãã³ãã£ãã£ããã€ãã®ïŒãšã³ãã£ãã£ïŒãååšããããšã³ãã£ãã£ã¯ãã¢ã€ãã³ãã£ãã£ãåããªãã°ãå±æ§ãç°ãªã£ãŠããŠãåäžã®ãã®ãšããŠæ±ããªããã°ãªããªããéã«ãå±æ§ããŸã£ããåãã§ããã¢ã€ãã³ãã£ãã£ãéãã°åœç¶å¥ãšã³ãã£ãã£ãšãªãããšã³ãã£ãã£ã¯ãã¡ã€ã³ã¢ãã«ã®äž»åœ¹ã§ããããã®ã©ã€ããµã€ã¯ã«ãèããããšãéèŠã«ãªãããã¡ã€ã³ã¢ãã«ã®äžã«ãããŠããšã³ãã£ãã£ã®åäžæ§ãã©ããã£ãŠå€æããããå®çŸ©ããªããã°ãªããªãã
-
ãã¡ã€ã³ã¬ã€ã€ãŒã«ç»å Žããæ§æèŠçŽ ãã¢ããªã±ãŒã·ã§ã³äžã§åäžæ§ã®èå¥ãå¿ èŠãªãªããžã§ã¯ããã€ãŸããã¢ããªã±ãŒã·ã§ã³äžã§ãªããžã§ã¯ãã®äžææ§ãæèããŠæ±ãå¿ èŠããããªããžã§ã¯ãã§ããã以äžã®ãããªãšã³ãã£ãã£ã¯æ¥åãéè¡ããããã§äžæã«ç¹å®ããå¿ èŠãããã
ç©ããµãŒãã¹ïŒååãåšåº«ïŒ 人ãçµç¹ïŒé¡§å®¢ïŒ å ŽæïŒé éå ãå庫ãä¿ç®¡å ŽæïŒ ååŒïŒæ³šæãåšåº«åŒåœïŒ ä»®ã«åå§ååå¥äººã®è€æ°ã®ã顧客ãããããšãããããã®é¡§å®¢éã¯å¥ã ã®ã€ã³ã¹ã¿ã³ã¹ãšããŠæ±ãããã¹ãã§ãå称ãäžç·ã ãããšãã£ãŠãã®ååšãäžæ¬ãã«ããŠããŸããšã泚æãé éãç®è¶èŠè¶ã«ãªã£ãŠããŸããéã«ããªããžã§ã¯ãããšã®åäžæ§ãæèããªãåãªãæ°éãéé¡ãšãã£ãåå€æ§ã§èªãããæŠå¿µã¯ããã®åŸã«çŽ¹ä»ããããªã¥ãŒãªããžã§ã¯ããšãªãã
-
ãšã³ãã£ãã£ãšã¯éã«ãããšãã°ãè²ãããéãã®ããã«ããã®å±æ§ã ããéèŠã§ãã¢ã€ãã³ãã£ãã£ãèããããšã«æå³ã®ãªããªããžã§ã¯ããããããããããªããžã§ã¯ãã¯ãå€ãªããžã§ã¯ãã«åé¡ãããå€ãªããžã§ã¯ããšã¯ãäºç©ã®æ§è³ªãè¡šçŸãããã®ã§ãããå€ãªããžã§ã¯ãã¯ç¶æ ãå€æŽã§ããªããã®ïŒimmutableïŒãšããŠæ±ãããšã³ãã£ãã£ã®è€éãã«å°å¿µã§ããããã«ãå€ãªããžã§ã¯ãã¯ã·ã³ãã«ãªèšèšã«ä¿ã€ããã«ãããïŒãã®å€ãªããžã§ã¯ãã¯ãPofEAAã®Value Objectãã¿ãŒã³ãšåããã®ãè¡šããŠããïŒ
-
ãã¡ã€ã³ã¬ã€ã€ãŒã«ç»å Žããæ§æèŠçŽ ããã¡ã€ã³äžã«ç»å Žããå€ãã®ãã®ããªããžã§ã¯ãåããåäžæ§ãæããªãå°åã®ãªããžã§ã¯ãã以äžã®ãããªãªããžã§ã¯ãã¯ãããªããã£ãåãæšæºåïŒStringåãDateåïŒã§å®çŸ©ããã®ãäžè¬çã§ããã
æ°é éé¡ ã³ãŒã æ¥ä» åºå ããããã泚æçªå·ãã¯ã©ã¹ãã泚ææ°éãã¯ã©ã¹ããé éäºå®æ¥ãã¯ã©ã¹ããååã³ãŒããã¯ã©ã¹ãšãã£ãæ¥åäžã®æå³ã宿ãããã¯ã©ã¹ãšããŠæ瀺çã«å®çŸ©ããããšã§ããã®å€èªèº«ããã€ç¥èãããªã¥ãŒãªããžã§ã¯ãã«åçž®ãããããšãã§ãããœãããŠã§ã¢äžã®è¡šçŸãšããŠãããæ確ã«ã§ããã
-
ãã¡ã€ã³ã§æ±ãæŠå¿µã®äžã«ã¯ã1ã€ã®æ©èœãåŠçãåäœã§ååšããŠããŠããã®ïŒãªããžã§ã¯ãïŒãšããŠæ±ãã®ãäžèªç¶ãªãã®ãããããããããã®ã¯ããµãŒãã¹ãšãã圢ã§ãŠããã¿ã¹èšèªã«çµã¿èŸŒãããµãŒãã¹ã¯åºæ¬çã«ç¶æ ããããªãïŒstatelessïŒãïŒPofEAAã®Service Layerãã¿ãŒã³ãšã¯ç°ãªãæŠå¿µãªã®ã§æ³šæãService Layerãã¿ãŒã³ã¯DDDã®ã¢ããªã±ãŒã·ã§ã³å±€ã«çžåœãããã®ãèšã£ãŠããããDDDã®ãµãŒãã¹ã¯ãã¡ã€ã³ã¢ãã«ã®äžã«ãããµãŒãã¹çãªãã®ãæããŠãããéŠèš³ã¯ãªãããFowleræ°ã®èšäºãEvansã®åé¡ããåèã«ãªãïŒ
-
æåã«ãããµãŒãã¹ãšã¯ãã¢ããšããŠæ±ããšäžèªç¶ãªãã®ããµãŒãã¹ã«åé¡ããããšè§ŠããŸãããããšã³ãã£ãã£ãããªã¥ãŒãªããžã§ã¯ããšããã¢ãã«åé¡ã§ããªããããªæ¯ãèããåãåºãå Žæãšèãããšããã§ããããã€ãŸããããããæ¯ãèããåé¡ããæã«ãäŸå€çãæ¶æ¥µçã«äœ¿ãã¢ãã«ãšèããŠãã ããã
-
ãã¡ã€ã³ã¬ã€ã€ãŒã«ç»å Žããæ§æèŠçŽ ã ãšã³ãã£ãã£ïŒç©ã人ãå ŽæãååŒãªã©ïŒã«ããããªã¥ãŒãªããžã§ã¯ãïŒå€ãã®ãã®ïŒã«ãå±ããªãããã¡ã€ã³äžã®ããžãã¹ã«ãŒã«ãã¢ã¯ã·ã§ã³ãæäŸãããµãŒãã¹ã ãããã¯ããšã³ãã£ãã£ãããªã¥ãŒãªããžã§ã¯ãã®ããã«å®äœã®ã¢ããšããŠæããã®ã¯äžèªç¶ã§ãããžãã¹ã«ãŒã«ã«ããšã¥ããèšç®ãå€å®ãšãã£ãã¢ã¯ã·ã§ã³ãæ ããµãŒãã¹ãšããã®ãé©åã§ããã
äŸãã°ä»åã®ãã¡ã€ã³ã¢ãã«ã§ãååã®äŸ¡æ Œãç®å®ããããšããå ŽåãæšæºäŸ¡æ Œã ããªãã°ãšã³ãã£ãã£ããç°¡åã«ååŸã§ãããããŸãšãè²·ãã«ããå²åŒãæééå®ã§ã®å²åŒãŸã§èæ ®ããããšãããšç°¡åã«ã¯ååŸã§ããªãã å®éã®è²©å£²äŸ¡æ Œã決å®ããããã«ã¯ãè«žã ã®ããžãã¹ã«ãŒã«ãè€åçã«å å³ããå¿ èŠãããããäŸ¡æ Œã®ç®å®æ¹æ³ãã¢ããšããŠå®çŸ©ããã®ã¯äžèªç¶ãªããããã¡ã€ã³ãµãŒãã¹ãšããŠå®çŸ©ããã ãã®ç®å®æ¹æ³ãè³ããšããã«æ£åšãããšãã³ãŒãéè€ãã¡ã³ããã³ã¹æ§äœäžãäŸ¡æ Œå·®ç°çºçãªã©ã®ãã°ã®æž©åºã«ãªããããäŸ¡æ Œæ±ºå®ã«é¢ããç¥èã¯ããã®ãã¡ã€ã³ãµãŒãã¹ã«åçž®ãããŠå€ã«æµåºãããŠã¯ãããªãã
ãã¡ã€ã³ãµãŒãã¹ã®æäŸç²åºŠã¯ãã¢ããªã±ãŒã·ã§ã³ãµãŒãã¹ã®æ§ã«ããåäœã§ãŠãŒã¹ã±ãŒã¹ãæºããã»ã©å€§ç²ã§ã¯ãªãããã®ãã¡ã€ã³åºæã®ç¥èç¯å²ã«ç¹åãããµãŒãã¹ãšãªãããŸãããã¡ã€ã³ãµãŒãã¹ã¯ãèšç®ãå€å®ãè¡ãäžã§è€åçãªç¥èãå¿ èŠãšãªãããšãå€ãã倧æµã®å Žåã¯è€æ°ã®ãšã³ãã£ãã£ãããªã¥ãŒãªããžã§ã¯ããæããäžç²ã®ãµãŒãã¹ãæäŸããããšã«ãªãã éã«èšããšããšã³ãã£ãã£åäœãããªã¥ãŒãªããžã§ã¯ãåäœã®ç¥èã§æäŸã§ããã¡ãœãããããã°ãããã¯ãã¡ã€ã³ãµãŒãã¹ã§ã¯ãªãããšã³ãã£ãã£ãããªã¥ãŒãªããžã§ã¯ãã«èšè¿°ããã°ããã
- ã¢ããªã±ãŒã·ã§ã³ã¬ã€ã€ãŒã«ç»å Žããæ§æèŠçŽ ããã¡ã€ã³ã¬ã€ã€ãŒã®å€§å°æ§ã ãªç¥èãææ®ïŒorchestrateïŒããŠããŠãŒã¶ãŒã«å¯ŸããŠæå³ã®ããåäœã®æ©èœãæäŸãããµãŒãã¹ããŠãŒã¹ã±ãŒã¹ã«ç»å ŽããŠãããããªæ©èœã¯ãã¢ããªã±ãŒã·ã§ã³ãµãŒãã¹ã§è¡šçŸããããããå®éã®ããžãã¹ããžãã¯ã®èšè¿°ã¯ãã¡ã€ã³ã¬ã€ã€ãŒã®éšåã«å§è²ããŠãã¢ããªã±ãŒã·ã§ã³ãµãŒãã¹èªäœã¯ãã¡ã€ã³ã¬ã€ã€ãŒã®éšåã®èª¿æŽã«åŸ¹ããã
- ã¢ãžã¥ãŒã«ã®ä»çµã¿ïŒJavaã®ããã±ãŒãžã.NETã®åå空éãªã©ïŒã¯ãããã°ã©ãã³ã°ã«ãããŠã¯èª°ãã䜿ã£ãŠããã人éãäžåºŠã«èããããç©äºã®éã«ã¯éçãããã®ã§ãæŠå¿µã«ã€ããŠãåãããã«ã¢ãžã¥ãŒã«åå²ãå¿ èŠã§ãããããã°ã©ãã³ã°ã®å Žåãšåããããã¡ã€ã³ã¢ãã«ã®ã¢ãžã¥ãŒã«åå²ã«ãããŠãé«åéïŒäœçµåãéèŠãªç®å®ã«ãªããé¢é£ãåãæŠå¿µå士ã¯ã²ãšã€ã«ãŸãšãïŒé«åéïŒããã€äžåºŠã«èããªããã°ãããªãç¯å²ã¯æå°éã«ããïŒäœçµåïŒãã¢ãžã¥ãŒã«ã®ååãããŠããã¿ã¹èšèªã®éèŠãªäžèŠçŽ ãšããŠæ±ããã¢ãžã¥ãŒã«ãã³ãŒããšåæ§ããªãã¡ã¯ã¿ãªã³ã°ã«ãã£ãŠã¢ãžã£ã€ã«ã«é²åãããŠãããªããã°ãªããªãã
-
ãªããžã§ã¯ãã®ã©ã€ããµã€ã¯ã«ãèšèšããã«ã¯ããŸãã©ã€ããµã€ã¯ã«ã®åäœãšãªããªããžã§ã¯ãã®ãŸãšãŸããèããªããã°ãªããªããããšãã°ã泚æããšã泚ææ现ãã®ããã«ãé¢é£ãããªããžã§ã¯ãã®ã°ã«ãŒãã¯éçŽãšããŠæ±ããéçŽãåäœãšããŠã¢ãã«ã®ä»ã®èŠçŽ ãšã®å¢çãæ確ã«åãããéçŽã®äžãã1ã€ãšã³ãã£ãã£ãéžãã§ããããéçŽã®ã«ãŒãïŒrootïŒãšããïŒå ã»ã©ã®äŸã§ã¯ãã泚æããã«ãŒãã«ãªãïŒã1åããã®åŠçã§åç §ãç Žæ£ããããããªç¹å¥ãªå Žåãé€ããŠãå€éšããåç §ã§ããã®ã¯ã«ãŒãã ãã§ãäžã®ãªããžã§ã¯ãã«å¯ŸããåŠçã¯ãã¹ãŠã«ãŒããäžç¶ãããããããããšã§ãéçŽå ã®ã¢ãã«ã®äžè²«æ§ãç¶æããããšãã§ããã
-
ãã¡ã€ã³ã¬ã€ã€ãŒã«ç»å Žããæ§æèŠçŽ ã å¯æ¥ã«é¢é£ã®ãããšã³ãã£ãã£ãããªã¥ãŒãªããžã§ã¯ãå士ãéçŽãããªããžã§ã¯ãã®ã¯ã©ã¹ã¿ã
äŸãã°ä»åã®ãã¡ã€ã³ã¢ãã«ã«ãããã泚æãããã-ã泚ææ现ãã®é¢é£ã»ããã¯ãã¢ããªã±ãŒã·ã§ã³ã®äžã§ããããåã ã§æ±ããããããã泚æããšãã1ã»ããã§æ±ãããããšãå€ãã ããã泚æååã®æ现ãåãããªã泚æããããã泚æçªå·ãåãããªã泚ææ现ã ããã£ãŠã圹ã«ç«ããªãã®ã§ãçµå±ã¯éœåºŠéœåºŠ ãäºãã®é¢é£ã蟿ã矜ç®ã«ãªãã
ãããã£ãé¢é£ãã«ãã»ã«åããŠã¢ã¯ã»ã¹ãåçŽåãã圹å²ãæ ãã®ãã¢ã°ãªã²ãŒãã§ããã
ã¢ã°ãªã²ãŒããããå Žåãã¢ã°ãªã²ãŒãå ã®1ã€ã®ãšã³ãã£ãã£ãã¢ã¯ã»ã¹ãã€ã³ãïŒã¢ã°ãªã²ãŒãã«ãŒããä»åã ãšã泚æãããããèªç¶ïŒãšããŠå®ããŠå€éšã«å ¬éããã¢ã°ãªã²ãŒãå ã®å ¥ãçµãã é¢é£ãã¹ãé èœããããšã§ãå€éšããã¯ã¢ã°ãªã²ãŒãã«ãŒããéããŠã¢ã°ãªã²ãŒãå ã®æ å ±ã«ééçã«ã¢ã¯ã»ã¹åºæ¥ãããã«ãªãã
- ãªããžã§ã¯ããéçŽã®çæåŠçã¯ããèªäœè€éã«ãªãããããããã¡ã¯ããªãå°å ¥ããŠçæåŠçãã«ãã»ã«å*2ããããªããžã§ã¯ãã®çæãã®ãã®ããã¡ã€ã³ã¢ãã«äžã§éèŠãªæå³ããã€ããšã¯ïŒã»ãšãã©ïŒãªãããããã¡ã¯ããªã¯ãã¡ã€ã³ã¢ãã«ã®äžéšã§ã¯ãªãããããŸã§ããã¡ã€ã³ã®èšèšäžå¿ èŠãªäžèŠçŽ ããšããäœçœ®ä»ãã«ãªãã*2 æ¬æ¥ãã«ãã»ã«åããšã¯åã«å±æ§ãæäœã1ã€ã«ãŸãšããããšãè¡šãæŠå¿µã§ãå®è£ ã®è©³çŽ°ãå€éšããé ãæŠå¿µã§ãããæ å ±é èœããšã¯ç°ãªããŸãããããEvansã¯ãã®2ã€ãæ··åããŠäœ¿ã£ãŠããŠãã«ãã»ã«åãšããèšèãæ å ±é èœã®æå³ã§ã䜿ã£ãŠããããšã«æ³šæããŠãã ããã
-
ãã¡ã¯ããªã«ããçæããããã¡ã€ã³ãªããžã§ã¯ãã¯ã圹ç®ãçµããŠç Žæ£ããããŸã§ã¯çåãããçåæéã®éäžã§ãã»ãšãã©ã®å Žåã¯DBãªã©ã«ãã£ããæ°žç¶åããããDBãžã®æ°žç¶åãåãåããåŠçã®è€éãã«ãã£ãŠããã¡ã€ã³ã¢ãã«ãæ±æãããªãããã«ããããããªããžããªãšããæ°žç¶åïŒåãåããå°çšãªããžã§ã¯ãããã¡ã€ã³èšèšã«å°å ¥ããïŒãã¡ã¯ããªåæ§ããã¡ã€ã³ã¢ãã«ã®äžéšã§ã¯ãªãïŒããªããžããªã䜿ãåŽããã¯ããã¡ã€ã³ã¢ãã«ãããããã¡ã¢ãªäžã«ã³ã¬ã¯ã·ã§ã³ãšããŠååšããŠãããã®ããã«èŠããããªããžããªã¯ãã¢ãã«äžã§ã°ããŒãã«ãªã¢ã¯ã»ã¹ãå¿ èŠãªãšã³ãã£ãã£ïŒéçŽã®å Žåã¯ãã®ã«ãŒãïŒæ¯ã«ã1ã€çšæãããã
-
ãã¡ã€ã³ã¬ã€ã€ãŒããã³ã€ã³ãã©ã¹ãã©ã¯ãã£ã¬ã€ã€ãŒã«ç»å Žããæ§æèŠçŽ ããšã³ãã£ãã£ãã¢ã°ãªã²ãŒãã®ä¿ç®¡ïŒããŒã¿ã¹ãã¢ãžã®æ°žç¶åããã£ãã·ã¥ãžã®è¿œå ãªã©ïŒãšãä¿ç®¡æžã¿ã®ãšã³ãã£ãã£ãã¢ã°ãªã²ãŒãã®åãåºããæ ã圹å²ãæãããããã®åã®ãšããããŸãã«ãªããžã§ã¯ãã®è²¯èµåº«ã§ããã
å°ããªããžã§ã¯ãã®ä¿ç®¡ã«é¢ããæè¡èŠçŽ ã«ã€ããŠã¯ãRDBãå©çšããå Žåãããã°ãNoSQLãå©çšããå Žåããããããããã®æè¡èŠçŽ ã«é¢ããã³ãŒãã«ã€ããŠã¯ã€ã³ãã©ã¹ãã©ã¯ãã£ã¬ã€ã€ãŒã§å®è£ ïŒäŸãã°ãSQLã®ã¯ãšãªã³ãŒããªã©ïŒããŠããã¡ã€ã³ã¬ã€ã€ãŒã§ã¯æè¡èŠçŽ ãæèããããšãªãããã¡ã€ã³ã®èšèã§ãªããžã§ã¯ãã®ä¿ç®¡ã»åãåºããè¡ãã
-
Repositoryã¯ã©ã¹ãã€ã³ãã©ã¹ãã©ã¯ãã£å±€ã«é 眮ããå ŽåãRepositoryããã¡ã€ã³å±€ã«å±ããEntityãè¿åŽããããšãèãããšãã€ã³ãã©ã¹ãã©ã¯ãã£å±€ã«ããã¯ã©ã¹ïŒRepositoryïŒãããã¡ã€ã³å±€ã«ããã¯ã©ã¹ïŒEntityïŒã«äŸåããŠããèšãããéåžžããã¡ã€ã³å±€ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£å±€ã«äŸåããŠãããããã®äžãã€ã³ãã©ã¹ãã©ã¯ãã£å±€ããã¡ã€ã³å±€ã«äŸåããŠããŸããšãã¬ã€ã€ãŒå士ãåæ¹åã®äŸåé¢ä¿ããã¡ãè¿ã£ãŠãè€éããæãã®ã§ã¯ãªãã ãããã
-
RepositoryãšEntityãäž¡æ¹ãInterfaceãšImplementationã«åããInterfaceããã¡ã€ã³å±€ã«ãããImplementationãã€ã³ãã©ã¹ãã©ã¯ãã£å±€ã«ãããInterfaceã§ããRepositoryã¯ãInterfaceã§ããEntityã«äŸåããäžæ¹ã§ãImplementationã§ããRepositoryã¯Implementationã§ããEntityã«äŸåããã®ã§ããã¡ã€ã³å±€ã«äŸåãããã€ã³ãã©ã¹ãã©ã¯ãã£å±€ã®å éšã§å®çµããã
-
Imaplementationã¯ãInterfaceã«äŸåããŠããã®ã§ãäŸåé¢ä¿ã®åæ¹åæ§ã¯è§£æ±ºãããšã¯ãããªããã
- isXxx()ã®ãããªçåœå€ãè¿ãã¡ãœãããããªãããžãã¹ã«ãŒã«ã¯ãéåžžã®ãšã³ãã£ãã£ãå€ãªããžã§ã¯ãã«ã¯äžæãå²ãåœãŠãããªããããžãã¹ã«ãŒã«ããã¡ã€ã³ã¢ãã«äžã§è¡šçŸããã«ã¯ãè«çåŠã§ãããè¿°èªãïŒpredicateïŒã®ãããªåœ¹ç®ãããç¹æ®ãªå€ãªããžã§ã¯ããå°å ¥ããããããããªãã¡ä»æ§ã§ãããä»æ§ã¯äžè¬ã«ã次ã®3ã€ãèŠå®ããã
ãªããžã§ã¯ãã®åŠ¥åœæ§æ€èšŒïŒvalidationïŒ ãªããžã§ã¯ãã®éžå¥æ¡ä»¶ïŒselectionïŒ ãªããžã§ã¯ãã®çææ¡ä»¶ïŒcreationïŒ
- https://www.ogis-ri.co.jp/otc/hiroba/technical/DDDEssence/chap2.html
- http://d.hatena.ne.jp/j5ik2o/20101229/1293584046
- http://enterprisegeeks.hatenablog.com/entry/2016/07/25/081127
sf2-ddd
âââ app
âââ bin
âââ build
âââ lib
âââ src
â âââ __VendorPrefix
â âââ Application
â â âââ __DomainNameBundle
â â âââ Command
â â â âââ __Command.php
â â âââ Controller
â â â âââ __Controller.php
â â âââ DependencyInjection
â â â âââ Configuration.php
â â â âââ __CompilerPass.php
â â â âââ __Extension.php
â â âââ Form
â â â âââ Extension
â â â â âââ __FormExtension.php
â â â âââ Model
â â â â âââ __FormDataModel.php
â â â âââ Type
â â â âââ __EntityType.php
â â âââ Page
â â â âââ __Page.php
â â âââ Resources
â â â âââ config
â â â â âââ routing.yml
â â â â âââ services.yml
â â â âââ translations
â â â âââ views
â â âââ Tests
â â â âââ Command
â â â â âââ __CommandTestCases
â â â âââ Controller
â â â â âââ __ControllerTestCases
â â â âââ DependencyInjection
â â â â âââ __DependencyInjectionTestCases
â â â âââ Form
â â â â âââ __FormTestCases
â â â âââ Page
â â â âââ __PageTestCases
â â âââ __DomainNameAppBundle.php
â âââ Component
â âââ Domain
â â âââ Shared
â â â âââ Value
â â â âââ Gender.php
â â â âââ Interval.php
â â âââ __DomainNameBundle
â â âââ Application
â â â âââ __ApplicationService.php
â â âââ Entity
â â â âââ Model
â â â â âââ __EntityDataModel.php
â â â âââ __EntityExtendsDataModel.php
â â âââ Event
â â â âââ __DomainEvent.php
â â âââ Exception
â â â âââ __DomainException.php
â â âââ Interface
â â â âââ Dto
â â â â âââ __ServiceDto.php
â â â âââ Facade
â â â âââ __ServiceFacade.php
â â âââ Listener
â â â âââ __DomainEventListener.php
â â â âââ __EntityListener.php
â â âââ Repository
â â â âââ __EntityRepositoryInterface.php
â â âââ Resources
â â â âââ config
â â â âââ doctrine
â â â â âââ __Document.mongodb.xml
â â â â âââ __Entity.orm.xml
â â â âââ services.yml
â â â âââ validation.yml
â â âââ Service
â â â âââ __DomainService.php
â â âââ Specification
â â â âââ __DomainSpecification.php
â â âââ Tests
â â â âââ Application
â â â â âââ __ApplicationServiceTestCases
â â â âââ Entity
â â â â âââ __EntityTestCases
â â â âââ Event
â â â â âââ __EventTestCases
â â â âââ Exception
â â â â âââ __ExceptionTestCases
â â â âââ Interface
â â â â âââ __InterfaceTestCases
â â â âââ Listener
â â â â âââ __ListenerTestCaess
â â â âââ Service
â â â â âââ __ServiceTestCases
â â â âââ Specification
â â â â âââ __SpecificationTestCases
â â â âââ Validator
â â â âââ __ValidatorTestCases
â â âââ Validator
â â â âââ __DomainValidator.php
â â âââ __DomainNameBundle.php
â âââ Infrastructure
â âââ __DomainNameBundle
â âââ Messaging
â â âââ __EmailConsumer.php
â â âââ __LoggingConsumer.php
â âââ Repository
â â âââ __DocumentRepository.php
â â âââ __EntityRepository.php
â âââ Tests
â â âââ Messaging
â â â âââ __MessagingTestCases
â â âââ Repository
â â âââ __RepositoryTestCases
â âââ __DomainNameBundle.php
âââ tests
â âââ SeleniumTestSuite
âââ vendor
âââ web
src/main/java
âââ UserInterface
â âââ ... (java files)
âââ Application
â âââ OneUseCase.java
â âââ AnotherUseCase.java
â âââ YetAnotherUseCase.java
âââ Domain
â âââ SubDomain1
â â âââ ... (java files)
â âââ SubDomain2
â â âââ ... (java files)
â âââ SubDomain3
â â âââ ... (java files)
â âââ SubDomain3
â âââ ... (java files)
âââ Infrastructure
âââ database
â âââ ... (java files)
âââ logging
â âââ ... (java files)
âââ httpclient
âââ ... (java files)
src
âââ Acme
âââ ApiBundle
â âââ Controller
â â âââ UserController.php
â âââ Resources
â â âââ config
â â â âââ routing.yml
â â â âââ serializer
â â â âââ User.User.yml
â â â âââ User.UserId.yml
â â âââ views
â â âââ User
â â âââ all.html.twig
â âââ AcmeApiBundle.php
âââ CoreDomain
â âââ User
â âââ User.php
â âââ UserId.php
â âââ UserRepository.php
âââ CoreDomainBundle
âââ DependencyInjection
â âââ AcmeCoreDomainExtension.php
âââ Repository
â âââ InMemoryUserRepository.php
âââ Resources
â âââ config
â âââ repositories.xml
âââ AcmeCoreDomainBundle.php
application
user
UserController.php
UserService.php
blog
BlogController.php
BlogService.php
domain
user
Avatar.php
Address.php
UserService.php
UserRepository
blog
Post.php
Comment.php
BlogService.php
BlogRepository.php
User.php
Blog.php
infrastructure
user
UserService.php
blog
BlogService.php
app/
----ToDo/
--------App/
------------Providers/
----------------ToDoServiceProvider.php
----------------ConfigServiceProvider.php
------------Validators/
----------------LaravelValidator.php
------------ValueObject.php
------------BaseModel.php
--------Domain/
------------List/
----------------EloquentList.php
----------------ListRepository.php
----------------ListService.php
----------------ListValidator.php
----------------Priority.php
------------Task/
----------------EloquentTask.php
----------------TaskRepository.php
----------------TaskService.php
----------------TaskValidator.php
--------Http/
------------Lists/
----------------ListController.php
----------------ListPresenter.php
----------------ListViewComposer.php
------------Tasks/
----------------TaskController.php
--------Infrastructure/
------------Lists/
----------------ListRepositoryCacheDecorator.php
----------------EloquentListRepository.php
------------EloquentTaskRepository.php
com.some.namespace
application
services = (app services that talk to repositories and domain model)
validators = (validators for DTOs in app service layer)
domain
events = (domain events)
exceptions = (exceptions in domain - eg. during validation or business logic)
factories = (used to construct domain model objects - eg. construct from DTOs)
model = (full domain model with all entities, value objects etc.)
repositories = (interfaces only - implemented in infrastruct.)
services = (domain service interfaces only - implemented in infrastr.)
infrastructure
messaging = (message listeners - eg RabbitMQ - talks to app services)
repositories = (repository implementations)
sql = (one version of repository implementation)
rest = (rest endpoints - talks to application services)
services = (domain service implementations)
[projectName]-domain
âsrc
âmain
âjava
â âcom
â âexample
â âdomain ...(1)
â âmodel
â â âXxx.java
â â âYyy.java
â â âZzz.java
â ârepository ...(2)
â â âxxx
â â â âXxxRepository.java
â â âyyy
â â â âYyyRepository.java
â â âzzz
â â âZzzRepository.java
â â âZzzRepositoryImpl.java
â âservice ...(3)
â âaaa
â â âAaaService.java
â â âAaaServiceImpl.java
â âbbb
â âBbbService.java
â âBbbServiceImpl.java
âresources
âMETA-INF
âspring
â[projectname]-domain.xml ...(4)
â[projectname]-infra.xml ...(5)
(1) ãã¡ã€ã³ãªããžã§ã¯ããæ ŒçŽããã (2) ãªããžããªãæ ŒçŽããããšã³ãã£ãã£ããšã«ããã±ãŒãžãäœæããã é¢é£ãããšã³ãã£ãã£ãããã°ãäž»ãšãªããšã³ãã£ãã£ã®ããã±ãŒãžã«ãåŸãšãªããšã³ãã£ãã£ã®Repositoryãé 眮ããã (OrderãšOrderLineãªã©)ãDTOãå¿ èŠãªå Žåã¯ããã®ããã±ãŒãžã«é 眮ããã RepositoryImplã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£å±€ã«å±ããããéåžžããã®ãããžã§ã¯ãã«å«ããŠãåé¡ãªãã ç°ãªãããŒã¿ã¹ãã¢ã䜿ããªã©ãè€æ°ã®æ°žç¶åå ããããå®è£ ãé èœãããå Žåã¯ãå¥ãããžã§ã¯ã(ãŸãã¯ããã±ãŒãž)ã«ãRepositoryImplãå®è£ ããããã«ããã (3) ãµãŒãã¹ãæ ŒçŽãããæ¥å(ãŸãã¯ãšã³ãã£ãã£)ããšã«ãããã±ãŒãžã€ã³ã¿ãã§ãŒã¹ãšå®è£ ããåãéå±€ã«é 眮ããã å ¥åºåã¯ã©ã¹ãå¿ èŠãªå Žåã¯ããã®ããã±ãŒãžã«é 眮ããã (4) ãã¡ã€ã³å±€ã«é¢ããBeanå®çŸ©ãè¡ãã (5) ã€ã³ãã©ã¹ãã©ã¯ãã£å±€ã«é¢ããBeanå®çŸ©ãè¡ãã
[projectName]-web
âsrc
âmain
âjava
â âcom
â âexample
â âapp ...(1)
â âabc
â â âAbcController.java
â â âAbcForm.java
â â âAbcHelper.java
â âdef
â âDefController.java
â âDefForm.java
â âDefOutput.java
âresources
â âMETA-INF
â â âspring
â â âapplicationContext.xml ...(2)
â â âapplication.properties ...(3)
â â âspring-mvc.xml ...(4)
â â âspring-security.xml ...(5)
â âi18n
â âapplication-messages.properties ...(6)
âwebapp
âWEB-INF
âviews ...(7)
â âabc
â â âlist.jsp
â â âcreateForm.jsp
â âdef
â âlist.jsp
â âcreateForm.jsp
âweb.xml
(1) ã¢ããªã±ãŒã·ã§ã³å±€ã®æ§æèŠçŽ ãæ ŒçŽããããã±ãŒãžã (2) ã¢ããªã±ãŒã·ã§ã³å šäœã«é¢ããBeanå®çŸ©ãè¡ãã (3) ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããããããã£ãå®çŸ©ããã (4) SpringMVCã®èšå®ãè¡ãBeanå®çŸ©ãè¡ãã (5) SpringSecurityã®èšå®ãè¡ãBeanå®çŸ©ãè¡ãã (6) ç»é¢è¡šç€ºçšã®ã¡ãã»ãŒãž(åœéå察å¿)å®çŸ©ãè¡ãã (7) View(jsp)ãæ ŒçŽããã
[projectName]-env
âsrc
âmain
âresources
âMETA-INF
âspring
â[projectname]-env.xml ...(1)
â[projectname]-infra.properties ...(2)
(1) ç°å¢ã«äŸåããBeanå®çŸ©(DataSourceç)ãè¡ãã (2) ç°å¢ã«äŸåããããããã£ãå®çŸ©ããã
åèæç®