1.ã¯ããã«
ãã®èšäºã§ã¯ããããã®3ã€ã®æçŽã«ã€ããŠã話ããããšæããŸããããããã¯åžžã«èãããŸãããå€ãã®å Žåã7ã€ã®ã·ãŒã«ã®èåŸã«ããç§å¯ã§ããã察象åéã«åºã¥ããŠãã¶ã€ã³ã®éçºãç¶ç¶ãããå Žåã«åœ¹ç«ã€å€ãã®ãªãœãŒã¹ãæäŸããŸãïŒ DDDïŒDomain Driven DesignïŒã
2.ã§ã¯ããªãDDDãªã®ãïŒ
ãã¡ã€ã³ïŒãã¡ã€ã³ããžãã¯ïŒãŸãã¯ããžãã¹ããžãã¯ïŒããžãã¹ããžãã¯ïŒã«ã¯ãããã€ãã®å®è£ ãã³ãã¬ãŒãããããŸãã
1ïŒ ããŒãã«ã¢ãžã¥ãŒã« -ããŒã¿ããŒã¹ããŒãã«ãŸãã¯ãã¥ãŒå ã®ãã¹ãŠã®ã¬ã³ãŒãã®ããžãã¹ããžãã¯ãåŠçãããåäžã³ããŒã®ãªããžã§ã¯ãã§ãã
2ïŒ ãã©ã³ã¶ã¯ã·ã§ã³ã¹ã¯ãªãã -ãã¬ãŒã³ããŒã·ã§ã³ã¬ãã«ããã®èŠæ±ãåãå ¥ããæé ã«ãããããžãã¹ããžãã¯ãšã®ããåããæŽçããŸãã
3ïŒ ãã¡ã€ã³ã¢ãã« -çŽæ¥ããµããžã§ã¯ããšãªã¢ã®ãªããžã§ã¯ãã¢ãã«ãåäœãšããŒã¿ã®äž¡æ¹ãå«ãŸããŸãã
ãããã®ãã¿ãŒã³ã«ã€ããŠã¯ã Martin Fowlerã®èæžArchitecture of Enterprise Software Applicationsã§è©³ãã説æãããŠããŸãã ãšã³ã¿ãŒãã©ã€ãºã¢ããªã±ãŒã·ã§ã³ãã¿ãŒã³ ã ïŒãšã³ã¿ãŒãã©ã€ãºã¢ããªã±ãŒã·ã§ã³ã¢ãŒããã¯ãã£ã®ãã¿ãŒã³ïŒEAAã®PïŒ ïŒ ã ãã®æ¬ã§ã¯ãæåã®2ã€ã®ãã³ãã¬ãŒãããµããžã§ã¯ããšãªã¢ã§ã®äœæ¥ã®éå§æã«ããé åçã§ããããšã瀺ããŠããŸããããµããžã§ã¯ããšãªã¢ã®ããžãã¯ã®è€éããå¢ãå Žåãæåã®2ã€ã®ã¢ãããŒãã䜿çšããŠã€ã³ãã©ã¹ãã©ã¯ãã£ãç¶æããããšã«ãã£ãšæ³šæãæã䟡å€ããããšããäºå®ã«ã泚ç®ããŸããäžèšã®ãã³ãã¬ãŒãã®3çªç®ãããããããã¡ã€ã³ã¢ãã«ãã決å®ããéã«åç §ããŠãã ããã
ããã«åºã¥ããŠããã®ãã³ãã¬ãŒãïŒã ãã¡ã€ã³ã¢ãã« ãïŒã¯ãããšãã°ãéèåžå Žãªã©ã®å°é£ãªåéã«æé©ã§ãããšããå°ããªçµè«ãåºããŸãã çŸåšäœæãããŠãããœãããŠã§ã¢ã®ã»ãšãã©ã¯ãããŸããŸãªããžãã¹ããŒãºã«åãããŠèšèšãããŠãããããæœè±¡çã§äžè¬åããããœãªã¥ãŒã·ã§ã³ã¯ãåžå Žã§ã®å°äœãç²åŸããŠããŸãã ãªãç§ã¯ããã«ã€ããŠæžããŠããã®ã§ããïŒ DDDã¯é«å質ãªèšèšã§ããã ãã§ãªãããœãããŠã§ã¢ã§å¯Ÿè±¡é åã匷調衚瀺ããæ¹æ³ã®è¯ãäŸã§ããããããéçºããã®ã§ã¯ãªãã察象é åã®å°é£ãé »ç¹ãªå€æŽãéä¿¡ã®åé¡ãããã³ãã®ä»ã®ç æ°ãããç°¡åã«å æããããã«å€æŽãä¿®æ£ãè¡ããšãæ°ããæ¬ é¥ã®éªåŽ©ãããªãã«éããããå¯èœæ§ããããç解ãã«ããdifficultãã·ã¹ãã ã
DDDã¯ã次ã®ãããªéçºãã©ã¯ãã£ã¹ã®éºç£ã決ããŠåŠå®ããŸããã
- ãªããžã§ã¯ãæåèšèš
- ãã¶ã€ã³ãã¿ãŒã³ïŒæåãªGoFãå«ãïŒ
- Robertâ Uncle Bobâ Martinãç·šéãããããããäžé£ã®SOLIDèšèšååã
- ãã¹ãéçº ïŒTDDïŒ ãã¹ãé§åéçº ïŒ
DDDã¯ããããè£å®ããã ãã§ãã è€éãªã·ããªãªã§é©åãªã¢ãã«ãšæœè±¡åãæ€çŽ¢ããã«ã¯ããªããžã§ã¯ãæåã¢ãããŒãã®åéã§ããªãã®ç¥èãå¿ èŠã§ãããDDDã ãã§ãªããããŸããŸãªååããã¿ãŒã³ãããã³å®è·µãé©çšããååãªçµéšãå¿ èŠã§ãã
3.ã©ãããå§ããããŸããïŒ
ç§ã®ãéå±ãªPRããã¡ã€ã³ããŒã¹ã®ãã¶ã€ã³ïŒDDDïŒããŸã ããªããéå±ãããŠããªããªããããããã§ãªããã°ãå°ãªããšãè³æãžã®ãªã³ã¯ãèŠãŠãã ããã
äžè¬ã®äººã ã®ããã«DDDã«å ãåœãŠãæåã®æ¬ã¯ããããããããã°ãã«ãŒããã¯ãïŒããŒã BBBïŒããã°ãã«ãŒããã¯ïŒïŒ ãã¡ã€ã³é§åèšèšïŒãœãããŠã§ã¢ã®äžå¿ã«ããè€éããžã®åãçµã¿ ãšãªãã¯ã»ãšãŽã¡ã³ã¹ ïŒãŸã ãã·ã¢èªã«ç¿»èš³ãããŠããŸããïŒã
ãã®æ¬ã§ã¯ãDDDãšã¯äœãããã¡ã€ã³èšèªããã³ãã¬ãŒããèšèšææ³ããªãã¡ã¯ã¿ãªã³ã°ãã¢ããªã³ã°ã éçºãæè»ã«ããæ¹æ³ãªã©ãé¢é£ãããã¹ãŠã®åŽé¢ã«ã€ããŠè©³ãã説æããŠããŸãã ããããæ¬ã§æèµ·ããããã¹ãŠã®åé¡ã«ç²ŸéããŠããŠãïŒããã¯ç°¡åãªäœæ¥ã§ã¯ãããŸããïŒã質åã¯çè«çãªèŠ³ç¹ããã®ã¿èæ ®ãããç·Žç¿ã®ããã®ãã¹ãŠã®ç¯å²ãæ®ããŠããŸãïŒæ¬ã¯ç¹å®ã®éçºãã©ãããã©ãŒã ã«çµã³ä»ããããŠããŸããïŒã ç§ãã¡ã®ã»ãšãã©ã«ãšã£ãŠãçŽç²ãªçè«ãèªãããšã¯å¥œãã§ã¯ãããŸããããå®çšçãªäŸããªããã°ã InfoQ ïŒ Domain Driven Design QuicklyããŒã¿ã«ã«ãã£ãŠäœæããããã®æ¬ã®ç°¡ç¥çïŒããã³ã¢ã¯ã»ã¹ç¡æïŒã«æ³šæãåããããšãã§ããŸãã
ãŸããEric Evansã®åªãããã¬ãŒã³ããŒã·ã§ã³ãçšæãããŠããŸãã
1ïŒ DDDïŒã¢ãã«ãæ©èœããã
2ïŒ DDDã«é¢ããEric EvansïŒæŠç¥çèšèš
InfoQããŒã¿ã«ã§ã¯ãä»ã®å€ãã®DDD ãã¬ãŒã³ããŒã·ã§ã³ãèšäºãã€ã³ã¿ãã¥ãŒãèŠã€ããããšãã§ããŸãã
ããã§ã¯ãçè«çãªéšåã§ã DDDã®å®çšçãªã¢ããªã±ãŒã·ã§ã³ã®äŸãã©ãã§èŠã€ããããšãã§ããããèããŸããã ãã®ããã®çŽ æŽãããæ¬ã¯ããã£ã ã»ããã«ãŒã·ãŒã«ãã£ãŠæžããããCïŒã䜿çšãã.NETãã¡ã€ã³é§åèšèšãåé¡-èšèš-ãœãªã¥ãŒã·ã§ã³ã§ãã
ãã®æ¬ã«ã¯ãå®çšçãªäŸããããŸãã
1ïŒèŠä»¶ã®å®çŸ©ããã³ãŒãã®èšè¿°ãŸã§ãèšèšããã³éçºããã»ã¹ã¯ã©ã®ããã«é²ãã§ããŸãã
2ïŒææ決å®ã«ãããŠã¢ãŒããã¯ãã£ã¬ã€ã€ãŒãæŽçããæ¹æ³
3ïŒDDDãã¿ãŒã³ãšãã©ã¯ãã£ã¹ã®é©çšæ¹æ³
4ïŒDDDçšã®å°ããªãã¬ãŒã ãæ§ç¯ããæ¹æ³
5ïŒã¢ãã«ãããã¡ã€ã³ã®ãã¡ã€ã³ãåé¢ããæ¹æ³
6ïŒå®éã®WPFïŒSilverlightã«ãé©çšå¯èœïŒãªã©ã®ç°å¢ã§ã®ããŒã¿è¡šç€ºãšããããšã®çžäºäœçšïŒModel-View-ViewModelïŒã®ææ°ãã¿ãŒã³ã
ãã®æ¬ã¯ãéåžžã«å¹ åºãã¢ã€ãã¢ãæã€åªããDDDã¯ãŒã¯ã·ã§ããã§ãã ãã®æ¬ã¯ãèŠä»¶ã®éçºããå§ãŸãããã®ãœãŒã¹ã³ãŒããCodeplexã§å ¥æå¯èœãªç£æ¥çšã¢ããªã±ãŒã·ã§ã³ã®å®è£ ã§çµãããŸãã
æ¬ã®ã³ã³ã»ããå šäœã¯ã3ã€ã®DDDã®æ±ã®æ¬ã«åºã¥ããŠããŸãã
- PoEAAããŒãã£ã³ãã¡ãŠã©ãŒ
- DDDãšãªãã¯ã»ã€ãŽã§ã³ã¹
- ãã¡ã€ã³ã®é©çš-ãžããŒãã«ãœã³ã®ãã¶ã€ã³ãšãã¿ãŒã³ïŒãžããŒãã«ãœã³ã®ã¢ããªã±ãŒã·ã§ã³æåã®ãã¶ã€ã³ãã¿ãŒã³ïŒCïŒããã³.NETã®äŸã«ããåé¡æåã®ã¢ããªã±ãŒã·ã§ã³ãã¶ã€ã³ïŒ
ãã®æ¬ã¯ãDDDã§äœ¿çšããããã¹ãŠã®åé¡ãæè¡ãããã³ãã¿ãŒã³ãè¡šé¢çã«æ±ã£ãŠããããã¹ãŠã®äŸã«ã¯ã³ãŒããä»å±ããŠãããããç解ã容æã«ãªããŸãã ãã®æ¬ã¯çŽ æŽãããã§ããããã·ã¢èªã®ç¿»èš³ã¯ç§ãã¡ã倱æãããã®ã§ãåæ¬ãèªãããšããå§ãããŸãã
ãã ããDDDã¯åãªãå®çšçãªãœãªã¥ãŒã·ã§ã³ãŸãã¯ãã¿ãŒã³ã§ã¯ãªããæèãšã¢ãããŒãã§ãããDDDã«åŸãããšã決å®ããå Žåã«ã¯ãã¢ãã«ã«äžããããé«ãåªå 床ã«çŠç¹ãåœãŠããã¡ã€ã³èšèªã®éçºãã¢ãã«ã®ã³ã³ããã¹ããã¢ããªã³ã°ããã»ã¹ãç¥èã®å ±æããªãã¡ã¯ã¿ãªã³ã°ãæŠç¥çèšèšãªã©...ãããEric Evensã®æ¬ãèªãäž»ãªçç±ã§ããDDDã®å²åŠãããæ·±ãããæ·±ãç解ã§ããããã§ãã
DDDã¯ç¹å®ã®ãã¯ãããžãŒã«é¢é£ä»ããããŠããŸããããTDDãã¬ãŒã ã¯ãŒã¯ãORMãPersistence IgnoranceãIoCã³ã³ãããŒïŒInversion of ControlïŒãå®è£ ããèœåãªã©ãåªããããŒã«ãšå®è·µãæŠåšãªãã«DDDããã©ããŒããã®ã¯å®¹æã§ã¯ãããŸããïŒãããã³AOPïŒã¢ã¹ãã¯ãæåããã°ã©ãã³ã°ïŒã®æ©èœã¯ããã¡ããããããã¹ãŠã®ããŒã«ãå¿ èŠã§ããããšãæå³ãããã®ã§ã¯ãããŸããããå®éã«DDDã®å®è£ ã«è¿ã¥ãããšãã§ããŸãã ãããã®ããŒã«ã®å®çšçãªäŸ¡å€ã¯ãDDDã®éèŠãªç®æšã§ãããã¡ã€ã³ã¢ãã«ãåé¢ã§ããããšã§ãã Jimmy Nilssonã®æ¬ã¯ããããã®ããŒã«ã®æ©èœãšçš®é¡ã玹ä»ããŠããŸãã ãŸãããžããŒã¯äŒæ¥ã¢ããªã±ãŒã·ã§ã³å®è£ ãã³ãã¬ãŒãã®äœ¿çšæ¹æ³ã瀺ãããããã®ãããã§ãææ°ã®ããŒã«ãšãã©ã¯ãã£ã¹ã«åºã¥ããå®å šãªãœãªã¥ãŒã·ã§ã³ãæ§ç¯ããŸãã
Ruby On Railsã§ã®DDDãã³ãã¬ãŒãã®å®è£ ïŒ
Railsã«å®è£ ãããDDDïŒãã¡ã€ã³é§åèšèšïŒã®æŠå¿µ
4. DDDã®è©±é¡ã®åé¡
C DDDã¯ãDDDDïŒDistributed Domain Driven Designãªã©ã®ãããã¯ãšãå¯æ¥ã«é¢é£ããŠããŸãã DDDDã¯ãåæ£ã·ããªãªã®DDDã§ãã çŸåšãDDDDã«ã€ããŠäžèšã§èšãã°ãDDDDãªãœãŒã¹ã¯ããŸããããŸãããã¡ãã»ãŒãžãšDDDã®å®è£ ã®åé¡ãã«ããŒããŠããã ã³ãã³ãã¯ãšãªåé¢ïŒCQS ïŒã¯ãã®ã¢ãããŒãã®å®è£ ã«åœ¹ç«ã¡ãŸãã ã°ã¬ãã°ã€ã³ã°ã¯ãDDDDã«é¢ããæ¬ãæºåããŠãããšèšããŸããã
SOAãšDDDã¯ã Udi Dahanãããè°è«ããå¥ã®èšå€§ãªãããã¯ã§ãã
5. DDDãã³ãã¬ãŒããæŠå¿µãããã³æŠå¿µ
ç£æ¥çšã¢ããªã±ãŒã·ã§ã³ã§ã¯ãDDDã¯ããã€ãã®ãã³ãã¬ãŒãã䜿çšããŸããããã®äžéšã¯Eric Evensã®æ¬ã«èšèŒãããŠããŸãããããã¯ãGoAãã³ãã¬ãŒããPoEAAã«èšèŒãããMartin Fowlerã®ãã³ãã¬ãŒã ã Enterprise Application Integration Templatesãªã©ãå«ããªããžã§ã¯ãæåã¢ãããŒãã®äœ¿çšãç¡å¹ã«ããŸããã ...
ãããã®ããã€ãã次ã«ç€ºããŸãã
- å€ãªããžã§ã¯ã
- ãšã³ãã£ãã£
- ãµãŒãã¹
- ã¢ãžã¥ãŒã«
- éèš
- ãªããžããª
- ä»æ§æž
- ã¬ã€ã€ãŒã¹ãŒããŒã¿ã€ã
- ã¢ã€ãã³ãã£ãã£ããã
- å·¥å Ž
- äœæ¥ãŠãããïŒUoWïŒ
- å¶åŸ¡ã®å転ïŒIoCïŒ
- ã¢ã¹ãã¯ãæåããã°ã©ãã³ã°ïŒAOPïŒ
- å¶éãããã³ã³ããã¹ã
- ãŠããã¿ã¹èšèª
- ãªããžã§ã¯ããªã¬ãŒã·ã§ãã«ãããã³ã°ïŒORMïŒ
- Anemic Domain Modelã¢ã³ããã¿ãŒã³
6.ã¢ããªã±ãŒã·ã§ã³ã®äŸ
DDDå®è£ ã®è¯ãäŸãèŠã€ããããšã¯éåžžã«å°é£ã§ããDDDãååšããªãããã§ã¯ãªããDDDã®çã®åããããªãè€éãªåéã§äœ¿çšãããã¢ããªã±ãŒã·ã§ã³ã§å®çŸãããŠããããã§ãã ãã ããDDDãã³ãã¬ãŒããå®è£ ããããã®ã¢ã€ãã¢ããã¬ãŒã¹ã§ããåªãããããžã§ã¯ããèŠã€ããããšãã§ããŸãã
ããã«ãããŸãïŒ
1ïŒTim McCarthyã®ã¢ããªã¯åœŒã®ãããžã§ã¯ãã§ãã ã圌ã®æ¬ã§è©³ãã説æãããŠããŸãã 圌ã¯ããã³ãã¬ãŒãã®äœ¿çšã ãã§ãªããDDDã®èŠ³ç¹ãããã¡ã€ã³ã¢ãã«ã®éçºã«ãçŠç¹ãåœãŠãŠããŸãã
ãã®ãããžã§ã¯ãã¯ã.NET 3.5ã«åºã¥ããŠæ§ç¯ããããã¡ã€ã³ã¢ãã«ãšã®ããŒã¿ãã€ã³ãã£ã³ã°ïŒããŒã¿ãã€ã³ãã£ã³ã°ãMVVMãã³ãã¬ãŒãã®å®è£ ïŒã®ææ°ã®ã¢ãããŒãã®å šåãçºæ®ãããšããç¹ã§ãèå³æ·±ããã®ã§ãã 圌ã®ã¹ã¿ã€ã«ã¯ãæœè±¡åãšåå©çšå¯èœãªã³ãŒãã匷調ããèœåã§ãæåã§ãã
2ïŒæ¬¡ã«æ³šç®ãã¹ããããžã§ã¯ãã¯ã Yves Goelevenã«ãã£ãŠéçºãããã¢ããªã±ãŒã·ã§ã³ã§ãããã®ã¢ããªã±ãŒã·ã§ã³ã®äœæã«ã€ããŠã¯ã圌ã®ããã° ïŒDDDã®åºæ¬æŠå¿µãåãäžããŠããŸãïŒã§èª¬æãããŠããŸãã 圌ã®ä»ã®ã¢ããªã±ãŒã·ã§ã³ã¯DDDãã¬ãŒã ã¯ãŒã¯ã§ãã ãªããžããªãšä»æ§ãã³ãã¬ãŒãã®çžäºäœçšã®å®è£ ã«æ³šæããå¿ èŠããããŸã ã
3ïŒBilly McCaffertyã¯ã SïŒarp ArchitectureãšåŒã°ããé©ãã¹ããªãŒãã³ãœãŒã¹DDDã«çŠç¹ãåœãŠããã¬ãŒã ã¯ãŒã¯ãéçºããŠããŸãã 圌ã¯ããã¬ãŒã ã¯ãŒã¯ã«å«ãŸãããã³ãã¬ãŒããšã¢ãããŒãã®èª¬æãå«ãéåžžã«è¯ã説æãæã£ãŠããŸãã ãã®ãã¬ãŒã ã¯ãŒã¯ã¯ãNHibernateã䜿çšããŠASP.NET MVCã¢ããªã±ãŒã·ã§ã³ãéçºããããšãç®çãšããŠããŸãã
4ïŒJimmy NilssonãéçºããCïŒDomain-Driven Designãµã³ãã«ã¢ããªã±ãŒã·ã§ã³ïŒndddsampleïŒã¯ãDDDã®èŠ³ç¹ããã¢ããªã±ãŒã·ã§ã³ãããŒã¬ã€ã€ãŒã«åå²ããæ¹æ³ã瀺ããŠããŸãã 圌ã®æ¬ã§èª¬æãããŠãã貚ç©èŒžéã®äž»é¡åéã«ããããã«ãã£ã³ã°ãããã¯ãã¿ãŒã³ã®å®éã®å¿çšãå®èšŒãããŠããŸãã
ãã®ãããžã§ã¯ãã¯ãEric IvensãDomain Languageããšã¹ãŠã§ãŒãã³ã®ã³ã³ãµã«ãã£ã³ã°äŒç€ŸãCiterusãã®å ±åäœæ¥ã«åºã¥ããŠããŸãã
ãã®ãããžã§ã¯ãã®ç®çïŒ
- .DDã§DDDã䜿çšããå®éã®äœ¿çšæ¹æ³ã瀺ããŸãã
- .NETã®åéã«ãããçŸåšã®ãŠãŒãã£ãªãã£ãæè¡ãããã³éçºæ¹æ³è«ã®äœ¿çšãALT.NETã³ãã¥ããã£ã§è°è«ãããŠããŸã ã
- å žåçãªDDDã¢ããªã±ãŒã·ã§ã³ã®å®è£ ã®å®çšçãªäŸã瀺ããŸãã
- ç¹å®ã®ãã©ãããã©ãŒã ã§DDDãå®è£ ããæ¹æ³ã瀺ããŸããããã«ãããä»ã®ãã©ãããã©ãŒã ã§ãåãããšãç°¡åã«è¡ããŸãã
- å®è¡å¯èœãªãã©ã¯ãã£ã¹ãéžæããã®ã«åœ¹ç«ã¡ãŸãã ããŸããŸãªã¢ãããŒãã«ãããã³ãã¥ããã£ã¯ãããã«ã€ããŠè°è«ããç¹å®ã®å®è£ ã«é©ãããã®ãéžæã§ããŸãã
詳现ã¯ãã¡ããã芧ãã ãã ã
7.ãã¡ã€ã³é§åèšèšãªãœãŒã¹
å ¬åŒãŠã§ããµã€ã-http://domaindrivendesign.org/
ãã£ã¹ã«ãã·ã§ã³ã°ã«ãŒã-http://tech.groups.yahoo.com/group/domaindrivendesign/ã¯å€§äººã®ã°ã«ãŒãã§ãããéåžžã«åªããã¢ã€ãã¢ã®ãœãŒã¹ã§ãããDDDã®åéã«ãããããããçš®é¡ã®åé¡ãè°è«ããå Žæã§ãã ãã®äžã§ãDDDãçµéšãã人ã ãããªãã®è³ªåã«çããããšãã§ããŸãã
Jimmy Bogardã®ããã°-http ://www.lostechies.com/blogs/jimmy_bogard/default.aspx
ã³ãªã³ãžã£ãã¯ã®ããã°-http://colinjack.blogspot.com/
ã°ã¬ãã°ã€ã³ã°ã®ããã°-http://codebetter.com/blogs/gregyoung/default.aspx
Casey Charltonã®ããã°-http://devlicio.us/blogs/casey/
Udi Dahanã®ããã°-http://www.udidahan.com/
ãã¡ã€ã³é§åèšèšã®æŠèŠ-http://msdn.microsoft.com/en-us/magazine/dd419654.aspx
8.çµè«
è€éãªäŒæ¥ã·ã¹ãã ã§ããªããžã§ã¯ãæåã®èŠéããæ¡å€§ããéçºãšèšèšã®æ°ããæ¹æ³ãåŠç¿ããããšã«èå³ãããå Žåã¯ãDDDããŸãã«å¿ èŠã§ãã
http://weblogs.asp.net/arturtrosin/archive/2009/02/09/domain-driven-design-learning.aspx