ã¢ã¹ãã¯ãæåããã°ã©ãã³ã°ã«é¢ããææãäžå®ãç念ã«ã€ããŠã®
Andres Halesbergãšã®äŒè©±ã®äžã§ ãAOPãšDIã競åããæŠå¿µã§ãããšããäžè¬çãªæ··ä¹±ãšèª€è§£ã«èšåããŸããã ãã®èšäºã§ã¯ãããã2ã€ã®ã¢ãããŒãã®ãã¹ãŠã®çžéç¹ãšé¡äŒŒç¹ã«ã€ããŠèª¬æããŸããæè¿ãMSDN Magazineã®12æå·ã§ãDino Espositoã®èšäºã
ã¢ã¹ãã¯ãæåããã°ã©ãã³ã°ãã€ã³ã¿ãŒã»ãã·ã§ã³ãçµ±äž2.0 ããèªãã§ããšãŠã楜ããã£ãã§ãã ããã¯çŽ æŽãããèšäºã§ããã.NETéçºã«æºããéçºè
ã«ã¯ããã®å
šäœãèªãããšã匷ããå§ãããŸãã å€ãã®DIãã¬ãŒã ã¯ãŒã¯ãããã³ããã€ãã®åºæ¬çãªãã¬ãŒã ã¯ãŒã¯ïŒWCFãASP.NET MVCïŒãšåæ§ã«ãUnityã¯ã€ã³ã¿ãŒã»ãã¿ãŒã®ãããªAOPã®ãããªæ©èœãæäŸããŸãã

äŸåæ§æ³šå
¥ãšã¯äœã§ããïŒ
äŸåæ§æ³šå
¥ã¯ãã³ã³ããŒãã³ãéã®äŸåé¢ä¿ãæžããããã«èšèšãããã¢ãŒããã¯ãã£ãã³ãã¬ãŒãã§ãã äŸåé¢ä¿ãæžããããšã®å©ç¹ã®1ã€ïŒå¯çµåã¢ãŒããã¯ãã£ããççµåã¢ãŒããã¯ãã£ãžã®ç§»è¡ïŒã¯ãã³ã³ããŒãã³ãã«é¢ããçžäºèªèãæžããããšã§ãã ããã«ããããå®è£
ã§ã¯ãªããã€ã³ã¿ãŒãã§ã€ã¹ã«åºã¥ããããã°ã©ã ããšããèšèšååã䜿çšããŠãã¿ã¹ã¯ã®ããè¯ãåé¢ãéæãããŸãïŒå
ïŒãå®è£
ã§ã¯ãªããã€ã³ã¿ãŒãã§ã€ã¹ãžã®ããã°ã©ã ãïŒã¯ã©ã€ã¢ã³ãã¯éåžžãã¯ã©ã¹ã§ã¯ãªãã€ã³ã¿ãŒãã§ã€ã¹ïŒinterfaceããŒã¯ãŒãã§å®£èšãããã®ïŒã§åäœããŸãã ç§ã¯ãã®ããã«è§£éããããšã奜ã¿ãŸãïŒãããã°ã©ã ããå®è£
ãžã§ã¯ãªããããã°ã©ã ããå¥çŽãžãïŒãªãªãžãã«ïŒãå®è£
ãžã§ã¯ãªããå¥çŽãžã®ããã°ã©ã ãïŒã ãã®å Žåã®ã¯ã©ã¹ã®äœ¿çšã«é¢ããå¥çŽã¯ãããã¥ã¡ã³ãïŒããã³å¿
èŠã«å¿ããŠäºåæ¡ä»¶ãäºåŸæ¡ä»¶ïŒãåããã¯ã©ã¹ã®ãªãŒãã³ïŒãããªãã¯ïŒã¡ã³ããŒã§æ§æãããŸãã ããã«æ£ç¢ºã«èšããšããã¯ã©ã¹ããŒã¹ã§ã¯ãªããããã¥ã¡ã³ãããŒã¹ã®ããã°ã©ã ãã ãããã£ãŠãæŠå¿µãããé©åã«åé¢ããããšã ããç®çã§ããå Žåãå®éã«ã¯ã€ã³ã¿ãŒãã§ãŒã¹ã¯å¿
èŠãããŸããã å¿
èŠãªã®ã¯ãããŒã¯ãŒãpublicãInternalãprotectedãããã³privateã ãã§ãã ãªããžã§ã¯ãæåã®èšèšã§ã¯ãã€ã³ã¿ãŒãã§ãŒã¹ã¯ãŸã£ãããã°ãã§ã¯ãªãããšã«æ³šæããããšãéèŠã§ãã ãã¹ãŠã®ãã¬ãŒã ã¯ãŒã¯éçºè
ããã®å²åŠãåºå®ããŠããããã§ã¯ãããŸããããJavaã¯ã©ã¹ã©ã€ãã©ãªã¯ã.NETéçºè
ãCOMã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããçµéšãå°ãªããšããçç±ã ãã§ãã
ã€ã³ã¿ãŒãã§ãŒã¹ïŒã¯ã©ã¹ã§ã¯ãªãïŒã«åºã¥ãããã°ã©ãã³ã°ã¯ãã³ã³ããŒãã³ããå€ãã®ã€ã³ã¿ãŒãã§ãŒã¹å®è£
ã§åäœããå¿
èŠãããå Žåã«åœ¹ç«ã¡ãŸãã ãããéåžžã«äŸ¿å©ã«ãªãã±ãŒã¹ã¯ç¡æ°ã«ãããŸãïŒæçµçã«ã¯ããã¹ãŠã®ã¢ãŒããã¯ãã£ãæ¡åŒµå¯èœã§ããããšãæãã§ããŸãïŒãããããããã«çŽé¢ããŸãããããã®åŸã®å®è£
ãããã³å¥ã®å®è£
ãäºæãããªãããšãååã«èªèããŠããŸãã ã§ã¯ããªãããïŒã€ã³ã¿ãŒãã§ãŒã¹ïŒã䜿çšããã®ã§ããããïŒ ã€ã³ã¿ãŒãã§ã€ã¹ããŒã¹ã®ããã°ã©ã ã®æŠå¿µã䜿çšããå Žåã次ã®2ã€ã®ãªãã·ã§ã³ããããŸãã
- æäŸãããŠããªãã³ã³ããŒãã³ãã«äŸåããŠããŸãããéçºãéå§ããå¿
èŠããããããåŸ
ã€ããšã¯ã§ããŸããã ããã«éèŠãªããšã¯ãä»ããç¬èªã®ã³ãŒãããã¹ãããå¿
èŠãããããšã§ãã ãã¹ãç®çã§ã®ã¿æäŸããããŸã§ããã®ã³ã³ããŒãã³ãã®åäœãã·ãã¥ã¬ãŒãïŒã¢ãã¯ïŒããå¿
èŠããããŸãã
- äžå®ã®ç¶æ
ïŒããšãã°ããŒã¿ããŒã¹ïŒãå®éã®ããã»ã¹ïŒããšãã°éè¡ã«ãŒãåŠçã·ã¹ãã ïŒããŸãã¯åçŽã«äœéãŸãã¯ä¿¡é Œæ§ã®äœããªãœãŒã¹ïŒWebãµãŒãã¹ïŒã«äŸåããŠããã³ã³ããŒãã³ãã«äŸåããŸãã ãã¹ãç®çã§ã®ã¿ããããã®ã³ã³ããŒãã³ãã®åäœãç¬èªã®å®è£
ã§ã·ãã¥ã¬ãŒãããå¿
èŠããããŸãã
ãããã®ç¶æ³ïŒå®éã«ã¯ãã¹ãã«é¢ããŠã®ã¿çºçããŸãïŒã§ã¯ãæçµã€ã³ã¹ããŒã«æã«ã³ã³ããŒãã³ããäºãã«ã©ã®ããã«äŸåããããããã£ãŠããŠããã³ã³ããŒãã³ãããœãŒã¹ã³ãŒãã«æ¥ç¶ãããŠããªãããšã¯å®éã«éåžžã«è¯ãããšã§ãã ããã§ã¯ããããã®ã³ã³ããŒãã³ããã©ã®ããã«çµã³ä»ããã®ã§ããããïŒ ãããŠãDependency Injectionãå¹ãå§ããŸãã äŸåæ§æ³šå
¥èšèšãã¿ãŒã³ã§ã¯ããªããžã§ã¯ããçžäºã«æ¥ç¶ããæ¹æ³ããã³ã³ãããã«æ瀺ãããã®ãã³ã³ãããã«ãªããžã§ã¯ããçžäºã«ãã€ã³ãããããã«åŒ·å¶ããŸãã å®éãã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšããŠã¯ã©ã¹ãªããžã§ã¯ããäœæããã®ã§ã¯ãªããã³ã³ãããŒã¡ãœããã䜿çšããŠãããè¡ããŸãã ã³ã³ããã¯å¿
èŠãªå®è£
ã決å®ãããªããžã§ã¯ããäœæããŠãããè¿ããŸãã
ã¢ã¹ãã¯ãæåããã°ã©ãã³ã°
äŸåæ§æ³šå
¥ã¯ãççµåã³ã³ããŒãã³ããçžäºã«ãªã³ã¯ããåé¡ã解決ããŸãã ã¢ã¹ãã¯ãæåããã°ã©ãã³ã°ã¯ãããŸããŸãªåé¡ã解決ããŸãã å®éãããŸããŸãªæ©èœãæ©èœïŒç£æ»ããã®ã³ã°ããã©ã³ã¶ã¯ã·ã§ã³åŠçãªã©ïŒãã»ãŒãã¹ãŠã®ããžãã¹èŠä»¶ã«åœ±é¿ããçŸå®ã«ã¯ãAOPã¯ã³ãŒãã®éè€ãæå°éã«æããªããããã®è€éãªçŸå®ãã³ã³ãã¯ããªãœãªã¥ãŒã·ã§ã³ã®åœ¢ã§è¡šçŸããŸãã ã³ãŒããç£æ»ããããã«ã³ãŒãã¬ãã¥ãŒãè¡ãããå Žåãç§ãã¡ã®èªç¶ãªæ¬²æ±ã¯1ã€ã®ãã¡ã€ã«ã ããèŠãããšã§ãã ãã ããã客æ§ã®ç¹å®ã®ç®¡çèŠä»¶ã«é¢é£ããã³ãŒããä¿®æ£ããå Žåããã®ã³ãŒããèŠãããããŸããã ãåç¥ã®ããã«ãããã¯ãªããžã§ã¯ãæåããã°ã©ãã³ã°ã ãã§ã¯å®çŸã§ãããã¢ã¹ãã¯ãæåããã°ã©ãã³ã°ã®åºçŸãšéçºã«ã€ãªãããŸããã
AOPãšDIã®é¡äŒŒç¹ãšçžéç¹
DIãšAOPã«ã¯ããã€ãã®é¡äŒŒç¹ããããŸãã
- ã©ã¡ããççµåã¢ãŒããã¯ãã£ãå®çŸããŸã
- ã©ã¡ããæ©èœã®ããè¯ãåé¢ãå®çŸããŸãã
- ã©ã¡ããã¡ã€ã³ã³ãŒãã®åé¡ã®äžéšã軜æžããŸãã
ãã ããDIãšAOPã¯ãæçšã§ããããšãå€æããç¶æ³ã§ã¯å€§ããç°ãªããŸãã
- DIã¯ãã³ã³ããŒãã³ãã«äŸåããŠããå Žåã«é©ããŠããŸããã³ã³ããŒãã³ãã®å®è£
æ¹æ³ã¯é¢ä¿ãããŸããã
- AOPã¯ãå€ãã®ã³ãŒãèŠçŽ ã«äœããã®åäœãé©çšããå¿
èŠãããå Žåã«é©ããŠããŸãã ããã«ãã¿ãŒã²ããã³ãŒãã¯å¿
ããããã®åäœã«äŸåããããã§ã¯ãããŸããã
åçãããã·
ããã§ããäŸåæ§æ³šå
¥ã¯ã©ã®ããã«ããŠã¢ã¹ãã¯ãæåããã°ã©ãã³ã°ã«é¢é£ä»ããããã®ã§ããããïŒ ã¯ããDIãã¶ã€ã³ãã¿ãŒã³ã ãã§ãæ°ããåäœãã³ã³ããŒãã³ãã«ç°¡åã«è¿œå ã§ããŸãã æ¹æ³ã¯æ¬¡ã®ãšããã§ããã³ã³ãããžã®äŸåé¢ä¿ãèŠæ±ãããšãã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£
ãååŸããããšã«ãªããŸãã ã©ã®ãããªå®è£
ãååŸãããã¯æšæž¬ã§ããŸãããå€ãã®å Žåãããã䜿ã£ãŠã²ãŒã ããã¬ã€ããŸãã ã³ã³ããŒãã³ãã«äœããã®åäœïŒããšãã°ããã¬ãŒã¹ã®åŒã³åºãïŒãè¿œå ããããã«ã³ã³ããã«èŠæ±ããå Žåããªããžã§ã¯ãèªäœã¯ååŸãããŸããã 代ããã«ãåçãããã·ãªããžã§ã¯ããååŸããŸãã ãããã·ãªããžã§ã¯ãã¯ããŠãŒã¶ãŒãšèŠæ±ãããã³ã³ããŒãã³ãã®éã«ãããèŠæ±ããåäœãå®è£
ããŸãã ãŸããDIãã¬ãŒã ã¯ãŒã¯ã«ã¯ã¯ã©ã€ã¢ã³ããšã³ã³ããŒãã³ãã®å®è£
ã®éã«åäœãåã蟌ãæ©èœããããããDIã¯AOPå
ã§ã®éçºãå¯èœã«ãããã¯ãããžãŒã®1ã€ãšããŠç解ãããŠããŸãã
ãããã·ããŒã¹ã®AOPïŒäœãããã®ïŒ
ãããã·ããŒã¹ã®ã¢ãããŒãã§æ°ã«å
¥ã£ãŠããã®ã¯ãAOPãDIã³ã³ã»ããã«ã©ã®ããã«é©åãããã§ãã DIã¯ããªããžã§ã¯ãéã®äŸåé¢ä¿ã®äœ¿çšãããããã£ã®èšå®ãåæåã¡ãœããã®åŒã³åºããªã©ãã³ã³ããŒãã³ããæ§ç¯ããæ¹æ³ã§ã³ã³ãããæ§æããã®ã«åœ¹ç«ã¡ãŸãã XMLãã¡ã€ã«ã®ããã€ãã®äŸåé¢ä¿ãšããŠããŸãã¯CïŒã³ãŒãã䜿çšããŠãã¢ã¹ãã¯ããç°¡åã«æ§æã§ããŸãã ã³ã³ããŒãã³ãã®æ§ç¯ãšã¢ã»ã³ããªãçµ±åãããŸãã
æ§æãã¡ã€ã«ãå€æŽããã ãã§ã¢ã¹ãã¯ããè¿œå ããæ©èœã¯ãéåžžã«äŸ¿å©ãªæ©èœã§ãã ã©ããã«äœããã®åé¡ããããšããŸãã ãããŠãããã³ã³ããŒãã³ããžã®ãã¹ãŠã®åŒã³åºãã远跡ããããšããŸãã ããã¯ãã¢ããªã±ãŒã·ã§ã³å
šäœãåã³ã³ãã€ã«ããã«å®è¡ã§ããŸãã ããã¯ãé©åãªãããã°æ©èœããªãã©ã³ã¿ã€ã ç°å¢ã§æ±ºå®çãªå©ç¹ãšãªããŸãã åé¡ãèŠã€ããŠè§£æ±ºããããã«ãæ°ã¶æãããå ŽåããããŸãã
ãããã·ããŒã¹ã®AOPïŒäœãåé¡ãªã®ã§ããïŒ
DIãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠå®è£
ããããããã·ããŒã¹ã®AOPã«ã¯ã次ã®ãããªå€ãã®å¶éããããŸãã
圌ãã¯
- ã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠå®è£
ãããã³ã³ããŒãã³ãã§ã®ã¿æ©èœããŸãã ã³ã³ããŒãã³ãã®å
éšã«ãããã¹ãŠã®ã¡ãœããïŒãããªãã¯ãŸãã¯ãã©ã€ããŒããéçãŸãã¯ã€ã³ã¹ã¿ã³ã¹ïŒã§æ©èœããããã§ã¯ãããŸããã ã³ã³ããŒãã³ãã¯ã¢ããªã±ãŒã·ã§ã³ã®äžéšã§ãããååãšããŠå€ãã®ã¯ã©ã¹ãå«ãããšã«æ³šæããŠãã ããã
- ã¯ã©ã€ã¢ã³ãã³ãŒããã³ã³ããããã³ã³ããŒãã³ããžã®ãªã³ã¯ãåãåã£ãå Žåã«ã®ã¿æ©èœããŸãã ã³ã³ããŒãã³ããç¬èªã®ã¡ãœãããåŒã³åºãããã³ã³ãããä»ããçŽæ¥ã®å¯Ÿè©±ãªãã§ã³ã³ããŒãã³ããåŒã³åºãããå Žåãã¢ã¹ãã¯ãã¯é©çšãããŸããã
- ãªããªã ã¢ã¹ãã¯ãã¯å®è¡æã«é©çšãããã³ã³ãã€ã«æã«ãã§ãã¯ãè¡ãæ¹æ³ã¯ãããŸããã PostSharpãªã©ã®ãã«ãæãã¬ãŒã ã¯ãŒã¯ã§ã¯ãã³ã³ãã€ã«äžã«ã¢ã¹ãã¯ãã誀çšãããšã©ãŒãçºçããã¢ã¹ãã¯ãéçºè
ã«ããŸããŸãªæ¹æ³ã§æ£ããå®è¡ããããšããã§ããŸãïŒããšãã°ãStreamãè¿ãã¡ãœããããå®å
šé¢é£ã®åŽé¢ïŒ;
- ïŒaïŒäœæ¥ããã³ãŒãã®éšåã«é©çšãããåŽé¢ãããã³ïŒbïŒäœæ¥ããã³ãŒãã®éšåã«é©çšãããåŽé¢ãç解ããããšã¯å°é£ã§ãã PostSharpãAspectJãªã©ã®å®å
šãªãã¬ãŒã ã¯ãŒã¯ã¯ãIDEã§è©³çŽ°ããã¹ãŠè¡šç€ºã§ããŸãã ããã«ããããœãŒã¹ã³ãŒãã®ç解ã倧å¹
ã«åäžããŸãã
- å®è¡æAOPã®ããã©ãŒãã³ã¹ã¯ããã«ãæãã¬ãŒã ã¯ãŒã¯ãããã¯ããã«å£ããŸãã å°æ°ã®ã倧ãŸãã«ãèšèšãããã¯ã©ã¹ã«ã¢ã¹ãã¯ããé©çšããå Žåãããã¯å¯æ¬¡çãªéèŠæ§ãæã¡ãŸãã ãã ããæ°çŸã®ã¯ã©ã¹ã«å¯ŸããŠåçãããã·ãäœæãããšãããã©ãŒãã³ã¹ã倧å¹
ã«äœäžããŸãã
- ãã€ãããã¯ãããã·ã¯ãDIãã¬ãŒã ã¯ãŒã¯ã®ãµãŒãããŒãã£ã®æ©èœã«ããããããšãæè¡çã«å®çŸå¯èœã§ãã£ãŠããå®å
šãªããžã§ã³ãå®çŸããããšã¯ãããŸããã§ããã ãããã¯åžžã«ã¡ãœããã®å®è£
ã«å¶éãããŠãããããã¯PostSharpãšAspectJãæäŸããªããã°ãªããªããã®ãšæ¯èŒããããšã¯ã§ããŸããã
ãããã·ããŒã¹ã®AOPïŒããã®ã¯äœã§ããïŒ
éçºè
ã競åãããã¯ãããžãŒã«æ°ãåãããããšãªããåžžã«äœããç·Žç¿ãå§ãããšãããã¯ãªã¹ã¯ã«ãªããŸããäœããåžžã«ç·Žç¿ãã人ã¯å®å
šã ãšæããããã§ãã ãããŠãç·Žç¿ã¯æ矩ã«ãªããŸãã ããã¯TDDã§èµ·ãããæå³ã®ãªã詳现ã¬ãã«ã§ãã¹ããæžãããšã人ã
ã«åŒ·å¶ããŸãã ãŸããäŸåæ§æ³šå
¥ã§ã¯ããã¹ãŠã®ã¯ã©ã¹ãçžäºã«åé¢ããå¿
èŠããããŸãã DIã¯å
ã
ãã¯ã©ã¹ã§ã¯ãªãã³ã³ããŒãã³ããåé¢ããããã«çºæãããããšãæãåºããŠãã ããã ã³ã³ããŒãã³ãã¯ã¢ããªã±ãŒã·ã§ã³ã®äžéšã§ããããããã¯ã§ã¯ãªããªããžã§ã¯ãã§ãã ç§ãã¡ã¯ïŒç€ŸäŒããã®å§åã®äžã§ïŒãã¹ãèŠä»¶ãæºããããã ãã«ãããè€éãªã¢ããªã±ãŒã·ã§ã³ãæžãããšãäœåãªããããŠããã®ã§ã¯ãªãããšå¿é
ããŠããŸããå®éãæçµè£œåã®å質ã®åäžã«ã¯ã€ãªãããŸããã ãŠããããã¹ãã¯ããŒã«ã§ãããç®æšã§ã¯ãªãããšãèŠããŠããå¿
èŠããããŸãã 究極ã®ç®æšã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã©ã€ããµã€ã¯ã«å
šäœã«ããã質ã®é«ãäœæ¥ã§ãã
ãããã«
ã¢ã¹ãã¯ãæåããã°ã©ãã³ã°ãšäŸåæ§æ³šå
¥ã¯éåžžã«ç°ãªãæŠå¿µã§ãããäºãã«é©ããŠããã±ãŒã¹ã¯éãããŠããŸãã ãããã®ç¶æ³ã§ã¯ãDIã®äžéšãšããŠAOPã䜿çšããããšã¯çã«ããªã£ãŠããŸãã ä»ã®ãªãã·ã§ã³ã«ã€ããŠã¯ãåçãããã·ãæªçšããïŒããã³ããã¯è§£æ±ºçã§ã¯ãããŸããïŒããŸãã¯AOPéçºå°çšã®ããŒã«ã䜿çšãããšãã2ã€ã®ãªãã·ã§ã³ãããããŸããã ãããŠããã®ãžã¬ã³ãã¯ç§ãPostSharpããŸãã¯.NETã ãã®ãã®ã§ã¯ãããŸããã åããžã¬ã³ãã¯ãäœãéžæãã¹ãããèããJavaããã°ã©ããŒãSpring AOPãŸãã¯AspectJã«ããã£ãŠããŸãã AOPãšDIã¯ç«¶åãããã¯ãããžãŒã§ã¯ãããŸããã 1ã€ã®ãããžã§ã¯ãã§äžç·ã«äœ¿çšã§ããŸãã ãã ããåãã¯ãããžãŒããªãäœãããã®ããç解ããŠç解ããã³ãŒãã®å質ã«çŠç¹ãåœãŠãããšãéèŠã§ãã
åç
§ïŒ