
æçš¿è ïŒã³ã³ã¹ã¿ã³ãã£ã³ã»ããŒãº
ã·ãã¢éçºè @ DataArtã
å ±åãªãŒã¬ãã€ã¶ãŒ@ GDG Dnipro
äŸåæ§æ³šå ¥
äœãããªãããã€å¿ èŠãªã®ã
ä»æ¥ã¯ãAndroidã®éçºã®å質ãåäžãããã®ã«åœ¹ç«ã€ããŒã«ã«ã€ããŠã話ããŸãã ãã®åé¡ã¯ãäŸåæ§æ³šå ¥ïŒDIïŒã䜿çšããŠè§£æ±ºã§ããŸãã éåžžããã®çšèªã¯æ³šå°ã泚å°åšãããã³ãäžæ¯ããšå°ãé¢é£ããŠããŸãã å®éãäŸåæ§æ³šå ¥ã¯ãäŸåæ§å転ã®åçãå®è£ ãããªããžã§ã¯ãã®äœæãšå®è£ ã®ç¬ç«æ§ã®ã«ãŒã«ãå®è£ ããèšèšãã¿ãŒã³ã§ãã
ãã®ãããã¯ã©ã¹ããããã¯ã©ã¹ã«ã¯ã³ã³ã¹ãã©ã¯ã¿ãŒããããã¯ã©ã¹ã®ã¡ã³ããŒãããã€ããããŸãã ãã®ã¯ã©ã¹ã®æ¬è³ªãäœæãããšãããã®ã¡ã³ããŒã«å¯ŸããŠå®£èšãããŠãããŸãã«ãã®åã®ã€ã³ã¹ã¿ã³ã¹ãã¯ã©ã¹ã«æäŸããå¿ èŠããããŸãã ãã®å Žåãããã¯ãã·ã³ã®ååãšãšã³ãžã³Engineã®ã¿ã€ãã§ãã ãªããžã§ã¯ããžã®ãªã³ã¯ã䜿çšãããããã¯ã©ã¹å ã®ãªã³ã¯ã¯ç©ºã«ãªããŸããã
ãããã£ãŠãOOPãå®è£ ãããªããžã§ã¯ããäœæã§ããŸãã
ã¯ã©ã¹ãäœæãã...

- æ§æã¯ç¶æ¿ã§ã¯ãããŸããã
- ãªã³ã¯ã¯ç©ºã«ãªããŸããã
ãªããžã§ã¯ããäœæããæ©èœ...
ãªããžã§ã¯ããäœæãããã·ã³ã®ååãèšå®ããæ°ãããšã³ãžã³ãäœæã§ããŸãã

ç°ãªããªããžã§ã¯ããäœæã§ããŸããããšãã°ãç°ãªãã¿ã€ãã®ãšã³ãžã³ãå¥ã®ãšã³ãžã³ã®ã¿ãäœæã§ããŸãã

䜿çšãã2ã€ã®ç°ãªããªããžã§ã¯ããäœæã§ãããšããŸãã ãã®å Žåããããªãªããã®åããšã³ãžã³ã ãããã£ãŠããã®ãšã³ãžã³ããžãŒãã°ã©ã³ãããŒãããŒã«é 眮ãããšãå°ãå¥åŠã«ãªããŸãã ããããããã§ããããªãã¯ãããããããšãã§ããŸãã ãã®å Žåãäœæãããšã³ãã£ãã£ãå¥ã®ãšã³ãã£ãã£ã«å«ãŸããå Žåããããããæ§æããã¿ãŒã³ã䜿çšãããŸããããã¯ãã芧ã®ãšãããç¶æ¿ã§ã¯ãªãæ§æã§ãã

ããã§ã¯ãã¹ãŠãéåžžã«ç°¡åã§ãïŒSuperTunedEngineãèŠããšãå®éã«ã¯ãããç¹å®ã®åã®ç¶æ¿è ã§ãããäºåã«å®£èšãããŠãããããããã€ã³ã¿ãŒãã§ãŒã¹ã®å®è£ ã§ããããšãããããŸã-ç§ãã¡ã«ãšã£ãŠããã¯ç¡çã§ãã ãã®å Žåããšã³ãžã³ã¯ã€ã³ã¿ãŒãã§ãŒã¹ã§ããå¯èœæ§ããããŸãã

2ã€ã®åºåãèŠããšã2ã€ã®ãªããžã§ã¯ããä»ã®ãªããžã§ã¯ãã«äŸåãããããšãã§ããŸãã å®éãããã¯äŸåé¢ä¿ã§ãã ãããã£ãŠããªããžã§ã¯ããäœæããæ©èœã¯äŸåé¢ä¿ãäœæããŸã-ããã¯ããªããããµããããšã§ãã
ãããŠ...äžæ¯
è»ã¯ãšã³ãžã³ã«äŸåããŠããŸãã ãšã³ãžã³ã¯ç°ãªãå ŽåããããŸãã ãããããã¹ããšå®çšŒåçšã«ç°ãªããšã³ãžã³ãå¿ èŠã«ãªããŸãã

å³ãããããããã«ïŒç»åã¯ãã®äŸã§ã¯ãããŸããïŒãäŸåé¢ä¿ã¯éåžžã«ç°ãªããŸãã äŸåãµãŒãã¹ãäŸåã¢ã¯ãã£ããã£ããã¬ãŒã³ã¿ãŒããã¥ãŒãã³ã³ãããŒã©ãŒããããŸãã ãããã®ãã¹ãŠã®ãšã³ãã£ãã£ã¯ãäŸåé¢ä¿ã«ãã£ãŠçµ¡ã¿åã£ãŠããŸãã ã°ã©ãã£ã«ã«ã«è¡šçŸããããšãããšãä»èŠãŠãããã®ãçµµã«çŸããŸãã
å®éã®çšŒåäžã®ã·ã¹ãã ã«ã¯ãã¯ããã«å€ãã®äŸåé¢ä¿ããããŸãã Androidã¢ããªã±ãŒã·ã§ã³ããã¹ãããããã®ããŒã«ãæäŸããæåãªäŒæ¥ã«ãã£ãŠå®æœããããã¹ãã¯ãåçŽãªäžèŠããã¢ããªã±ãŒã·ã§ã³ã§ããæ°åã®äŸåé¢ä¿ãããããšã瀺ããŠããŸãã æãåçŽãªã¢ããªã±ãŒã·ã§ã³ã§ããå¹³åããŠæ°åããæ°äžã®äŸåé¢ä¿ãèŠã€ãããŸãã ãããã®äŸåé¢ä¿ãå¯èœãªéãå¹ççã«å®è£ ããã¯ã©ã¹å ã®ä»ã®ã¯ã©ã¹ãã€ã³ã¹ã¿ã³ã¹åããã«ãç¹°ãè¿ãäœæ¥ãè¿œå ããŠäœåãªäœæ¥ãè¿œå ããã³ãŒããè¿œå ããããšãªããDaggerããŒã«ããããŸãã
ãã¬ãŒãšJSR-330æšæº
æœè±¡æ³šå ¥
ãã¬ãŒã¯JSR-330æšæºã«åºã¥ããŠããŸãã Googleã¯é·ãéãã®æšæºã䜿çšããŠãããJavaã€ã³ãžã§ã¯ã·ã§ã³ã®æšæºã§ãã
ã»ãšãã©ãªãæŽå²
- ãã¬ãŒ2-Googleãã°ã¬ãã°ããã¯
- ãã¬ãŒ-ã¹ã¯ãšã¢ããžã§ã€ã¯ã¯ãŒãœã³
- Guice-GoogleãJesse Wilson
å°ãæŽå²ãèŠãŠã¿ãŸããããGoogleã¯ãã€ãŠGuiceïŒäžè¬ã«ãJuiceããšåŒã°ãã緯床ã§ã¯ãGooseããšåŒã°ããŸãïŒã®ãããªè£œåãäœæããŸããã Guiceã¯ãªãã¬ã¯ã·ã§ã³ã§äœæ¥ãã泚éã«åŸã£ãŠããŸãããããã®åŸSquareã®éçºè ã¯Guiceã«ããã·ã¹ãã ãæ¹åããDagger1ãäœæããŸããã
Dagger1ã¯ã¯ãŒã«ãªããŒã«ã§ããããå®è·µã瀺ãããã«ãããã§äœããæ¹åã§ããŸãã ã¡ãªã¿ã«ãDagger1ãåå°ã䜿çšããŸããã ãããŠã2015幎ã«ãGoogleéçºè ã¯Dagger2ããªãªãŒã¹ããŸããã ã¡ããã©æè¿ãJake WhartonïŒSquare瀟ã®æåãªéçºè ïŒãç§ã«ç®ãåããŠãªãªãŒã¹ãçºè¡šããããã§ã-çŽæãæºãããããã¹ãçµæã«åºã¥ããŠç«¶äºã«åãé«å質ã®è£œåããããŸãã
å¶åŸ¡ã®å転ïŒIoCïŒ

æšæºãšçšèªã«æ»ããŸãã ãã®ãããé²åã®éçšã§ç»å Žãã補åããããŸãã å€æ°ã®æ³šéãæäŸããJSR-330ã䜿çšããŸãã ããã«ãããçš®ã®éçºãã¿ãŒã³ã§ããç¹å®ã®ååã«åŸããŸãããã®1ã€ã¯ãInversion of ControlïŒIoCïŒã§ãã
ãœãããŠã§ã¢ã³ã³ããŒãã³ãã«å€éšäŸåé¢ä¿ãæäŸããããã»ã¹ã¯ãäŸåé¢ä¿ç®¡çã«é©çšãããå Žåã®ãå¶åŸ¡ã®å転ãïŒIoCïŒã®ç¹å®ã®åœ¢åŒã§ãã åäžè²¬ä»»ã®ååã«åŸã£ãŠããªããžã§ã¯ãã¯ããã®äžè¬çãªã¡ã«ããºã çšã«ç¹å¥ã«èšèšãããå€éšãžã®å¿ èŠãªäŸåé¢ä¿ã®æ§ç¯ã«æ³šæãæããŸãã
ãã®ããšã¯ãã¢ãŒããã¯ãã£ãã¿ãŒã³ã«é¢é£ããŠããŸãã ã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¿ãŒãã§ã€ã¹ã«åºã¥ããŠèšè¿°ãããããã«ããã¡ã€ã³ããžãã¯ã«é¢é£ä»ããããå éšã¯ã©ã¹ãå€éšã¯ã©ã¹ããç¬ç«ããããã«ã¢ããªã±ãŒã·ã§ã³ãèšè¿°ããå¿ èŠããããŸãã ãããã£ãŠã責任ç¯å²ã®åºå¥ãå®çŸãããŸãã ããçš®ã®å®è£ ã«ç®ãåãããšããŸãã€ã³ã¿ãŒãã§ãŒã¹ã«ç®ãåããŸãã å¶åŸ¡ã®å転ã¯ãäŸåæ§æ³šå ¥ã«ãã£ãŠå®è£ ãããããŒã«ãããèªäœã¯äŸåæ§æ³šå ¥ïŒDIïŒãšåŒã°ããŸãã
ãªãã¬ã¯ã·ã§ã³ãšã³ã³ãã€ã«æé
- Dagger2 vs Dagger1
Dagger2ã¯ããªãã¬ã¯ã·ã§ã³ã䜿çšããDagger1ãšã¯ç°ãªããã³ãŒãçæã䜿çšããŸãã
JSR-330
JSR-330å¥åjavax.inject
- æ³šå ¥ ã 修食å ã ã¹ã³ãŒã ã ãªã©
- æšæºåãããäŸåæ§æ³šå ¥API
- åç §å®è£ ïŒGoogle Guice 2.0
- 3.0以éã®Springã§ããµããŒã
- ã€ã³ãžã§ã¯ã¿ãŒã®å®è£ ãŸãã¯æ§æã§ã¯ãªããAPIãå®çŸ©ããŸã
JSRã¯ã Inject泚éãèšè¿°ããã ãã§ãªãããšã³ãã£ãã£ãŒã察話ããŠäŸåæ§æ³šå ¥ãæäŸããæ¹æ³ã宣èšã§ãã泚éã®ããã±ãŒãžå šäœãæäŸããŸãã
ããšãã°ããã®æšæºã«åŸãç¹å®ã®äŸåæ§æ³šå ¥è£œåãã¡ããªã«ã€ããŠèª¬æããŸãã ãã®æšæºã«æºæ ããŠããªãä»ã®è£œåããããŸããä»æ¥ã¯ãããã«ã€ããŠèª¬æããŸãããããããã¯ååšããŸãã Inject ã Qualifier ã ScopeããããŸã -ãããã«ã€ããŠã¯åŸã§èª¬æããŸãã ãããã®æ³šéã¯ãDagger2ã«å¯ŸããŠã®ã¿äœæããããã®ã§ã¯ãªããGuiceãªã©ã®ä»ã®ã€ã³ãžã§ã¯ã¿ãŒã«å¯ŸããŠãååšããŸãã
ããã§ãã³ãŒãã«éæ³ãå ããæãæ¥ãŸãã...

ã¯ã©ã¹ã¡ã³ããŒã«æ³šéinjectã§æ³šéãä»ããããšããå§ããŸãã ãã¹ãŠãéåžžã«ç°¡åã§ãã å°æ¥ãããã®äŸåé¢ä¿ãã€ã³ã¹ã¿ã³ã¹åããããã«ãDependency InjectionããŒã«ãããã¯ãã€ã³ã¹ã¿ã³ã¹åããå Žæãšå¯Ÿè±¡ãæ£ããéžæã§ããŸãããã³ã³ã¹ãã©ã¯ã¿ãŒã«æ³šéãä»ããå¿ èŠããããŸãã ããã§ãç¶æ³ã¯ããå°ãèå³æ·±ããã®ã«ãªããŸãã
ããã©ã«ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒã«æ³šæããŠãã ãã

ã€ã³ãžã§ã¯ã·ã§ã³ãæäŸããæãç°¡åãªæ¹æ³ã¯ãããã©ã«ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒãäœæããããšã§ãã 次ã«ãããã©ã«ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒèªäœãšããã®ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹åãã€ã³ãžã§ã¯ã·ã§ã³ã§å¿ èŠãšããã¡ã³ããŒã«æ³šéãä»ããŸãã ããã¯éåžžã«ç°¡åã§ãã
ãã©ã¡ãŒã¿ãŒä»ãã³ã³ã¹ãã©ã¯ã¿ãŒ-å€æŽã«é©ããå Žæ

å®éã«ã¯ããã©ã¡ãŒã¿ãŒãæã€ã³ã³ã¹ãã©ã¯ã¿ãŒãå¿ èŠã§ãã ã·ã¹ãã ã¯ãããã©ã«ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒãããå Žåããããã®äžéšãèªåçã«ååŸã§ããŸãã ãŸããããšãã°ãåããšã³ãžã³ãæåã§æ§ç¯ããå¿ èŠãããå ŽåããããŸãã
ãŸãããã®ãããªã³ã³ã¹ãã©ã¯ã¿ã䜿çšããŠãã¬ãŒã³ã¿ãŒãæ³šå ¥ããŸã;ããã¯ãMVPïŒModel-View-PresenterïŒã§éåžžã«ãã䜿çšãããŸãã
ãããŠãŸã -ãããæ©èœãããæ¹æ³ã¯ïŒ

Dagger2.0ã®æ³šå ¥æ§é
ã€ã³ãžã§ã¯ã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ã¯ãDaggerã³ã³ããŒãã³ãã®çžäºæ¥ç¶ã§ãããã€ã³ãžã§ã¯ã·ã§ã³ã¢ãããŒã·ã§ã³ãšã¯ã©ã¹å®£èšãçµã¿åãããããšãã§ããŸãã
ã³ã³ããŒãã³ããšã¢ãžã¥ãŒã«

åç èè -Azimoã®Miroslaw Stanek
http://frogermcs.github.io/dagger-graph-creation-performance/
ãã¬ãŒæ³šå ¥æ§é ã«ã¯ãã³ã³ããŒãã³ããšã¢ãžã¥ãŒã«ãå«ãŸããŸãã åçïŒAzimaã®Miroslav Stanekã«ããèšäºïŒãèŠããšãã³ã³ããŒãã³ãã¯ã¢ãžã¥ãŒã«ã®ã³ã³ããã§ããã1ã€ã®ã³ã³ããŒãã³ãå ã«ä»ã®ã³ã³ããŒãã³ããããå¯èœæ§ããããŸãã åŸã§ããã¹ããããã³ã³ããŒãã³ãããµãã³ã³ããŒãã³ãïŒ@SubomponentïŒãšåŒã°ããããšãããããŸãã ãããŠãæ³šå ¥ã®èŠåã«åŸã£ãŠãããããåã«ãã³ã³ããŒãã³ãããšåŒã¶ããšã¯ã§ããŸããã
ã¢ãžã¥ãŒã«-ãžã§ãã¬ãŒã¿ãŒã³ã¬ã¯ã·ã§ã³

æœè±¡ã¢ãžã¥ãŒã« -ãã®ãšã³ãã£ãã£ïŒãã®ã¯ã©ã¹ïŒã¯ãªããžã§ã¯ãã®ã€ã³ã¹ã¿ã³ã¹ãçæããã¢ãžã¥ãŒã«ã§ããããšã瀺ã泚éã
ããã§ãããã¹ãŠãéåžžã«ç°¡åã§ãã çæãã泚éã¯ãæäŸæ³šéã§ãã æäŸã¢ãããŒã·ã§ã³ã¯ããã®ã¢ãžã¥ãŒã«ã¡ãœããããšã³ãã£ãã£ãæäŸããããšãåã«ç€ºããŠããŸãã æãèå³æ·±ãã®ã¯ããã®ã¡ãœããã®å éšã§ãã
ãããã®ã«ãŒã«ã«åŸã£ãŠãäœããã®æ¹æ³ã§ãªããžã§ã¯ããã€ã³ã¹ã¿ã³ã¹åããå¿ èŠããããŸãã äžéšã®ãªããžã§ã¯ãã¯äºãã«äŸåããŸãã äžéšã®ãªããžã§ã¯ãã¯ãã¢ãžã¥ãŒã«ã«ä¿åã§ããã¢ãžã¥ãŒã«ã¯ã©ã¹ã®ã¡ã³ããŒã«äŸåããŸãã ããšãã°ãåãã³ã³ããã¹ããã¢ãžã¥ãŒã«ã«é 眮ã§ããŸãã ã¢ãžã¥ãŒã«ã¯ãããèšæ¶ããåããã¬ãŒã³ã¿ãŒãã€ã³ã¹ã¿ã³ã¹åãããšãã«ãã¢ãžã¥ãŒã«ãäœæããããšãã«äžåºŠèšæ¶ããã³ã³ããã¹ãã«åºã¥ããŠæ°ãããã¬ãŒã³ã¿ãŒãšã³ãã£ãã£ãçæããŸãã
ã芧ã®ãšãããã¢ãžã¥ãŒã«ã«ã¯ã³ã³ã¹ãã©ã¯ã¿ãŒããããŸãã ãã®å Žåãã³ã³ããã¹ãã®ä»£ããã«Applicationãæž¡ããŸãã æ°ãããã®ãäœæãããšããã¢ãžã¥ãŒã«èªäœã«ä¿åãããŠãããã®ãè¿ãããšãã§ããŸãã
ã·ã³ã°ã«ãã³ãšã¯äœã§ããïŒ
ããã€ãã®ãšã³ãã£ãã£ãäœæãããšããç¹å®ã®ãã©ã¡ãŒã¿ãŒãèšå®ããŸãã ã·ã³ã°ã«ãã³ïŒè±èªã·ã³ã°ã«ãã³ ïŒ-ã€ã³ãžã§ã¯ã¿ãŒã泚éã€ã³ãžã§ã¯ããèŠã€ããå Žæã圌ã¯æ°ãããªããžã§ã¯ããã€ã³ã¹ã¿ã³ã¹åããã¹ãã§ã¯ãªããæ¢ã«ã€ã³ã¹ã¿ã³ã¹åãããã·ã³ã°ã«ãã³ãªããžã§ã¯ããåå©çšããã¹ãã§ãããšããæ瀺ã
@ã³ã³ããŒãã³ã
ã³ã³ããŒãã³ã-ã¢ãžã¥ãŒã«ã®ãã¹ããã¯ã©ã¹ã®ã€ã³ãžã§ã¯ã¿ãŒãäŸåé¢ä¿ããªãŒã®ã«ãŒãã

ãã®ã³ã³ããŒãã³ãã䜿çšãããšããã¹ãŠãå°ãé¢çœããªããŸãã ã³ã³ããŒãã³ãã¯ãå«ãŸããã¢ãžã¥ãŒã«ã®å¯¿åœãèæ ®ããå¿ èŠããããŸãã ã€ã³ã¹ã¿ã³ã¹åã®æå¹æéã䜿çšããã³ã³ããŒãã³ãã«ã·ã³ã°ã«ãã³ã䜿çšããããšãããšã競åãçºçããŸãã ãããã£ãŠãããšãã°ãApplicationã¯ã©ã¹ã®ãªããžã§ã¯ãã¯åäžã®ã€ã³ã¹ã¿ã³ã¹ã«ååšããã¢ããªã±ãŒã·ã§ã³ã®åç¶æéå šäœã«ååšãããããApplicationã®ã³ã³ããŒãã³ãã¯ã·ã³ã°ã«ãã³ã«ãªãããšãæ確ã«ç解ããå¿ èŠããããŸãã ããšãã°ãã¢ã¯ãã£ããã£ã®å Žåãã·ã³ã°ã«ãã³ã«ããããšãã§ãããã®æå¹æéã¯ã¢ã¯ãã£ããã£ã®æå¹æéã«é¢é£ä»ããããŸãã å¿ èŠã«å¿ããŠãè¿œå ã®ã·ã³ã°ã«ãã³æ³šéã䜿çšããŠã³ã³ããŒãã³ãã«æ³šéãä»ããããšãã§ããŸãã ãã®ã³ã³ããŒãã³ããå«ãã¢ãžã¥ãŒã«ã®ãªã¹ãããããŸãã
ããšãã°ãã¢ã¯ãã£ããã£ã«ã¯æ³šå ¥ã¢ãããŒã·ã§ã³ããããŸãã ã³ã³ããŒãã³ãã¯ããã®ã¢ã¯ãã£ããã£ãæäŸããã¢ãžã¥ãŒã«ãæå®ããå¿ èŠããããŸãã ã³ã³ããŒãã³ãã§æ³šå ¥ããå Žæãæå®ããå¿ èŠããããŸãã ã€ãŸããç¹å®ã®ã¯ã©ã¹ãæå®ããå¿ èŠããããŸããããšãã°ãBaseActivityãåºæ¬ã¯ã©ã¹ãšããŠèšè¿°ã§ããªãããšã«æ³šæããŠãã ãããããã¯ãæ³šå ¥ãBase aActivityããã³MainActivityã§ã®ã¿çºçããããã§ãããã¬ãŒã³ã¿ãŒãã«ãŒã«ã¯å°ãç°ãªããŸãã

injectã¡ãœããã¯ã誰ãäŸåããŠãããã®èª¬æã§ãã ã¢ãžã¥ãŒã«-äŸåé¢ä¿ãæäŸãã人ã®èª¬æã
ã¢ãžã¥ãŒã«ã«æ»ããŸãããã ã¢ãžã¥ãŒã«ã¯ã¯ã©ã¹ãšããŠå®£èšãããŸãã ã¢ãžã¥ãŒã«ã¯ãå®éã®ãªããžã§ã¯ããžã®å®éã®åç §ãæã€å®éã®ã¯ã©ã¹ã§ããããšã«æ³šæããããšãéèŠã§ãã ãããŠãã³ã³ããŒãã³ãã宣èšãããšãããã³ãã«ãããšããæåã§äœæããŸãã ã³ã³ããŒãã³ãã¯ãDaggerãçæãããªããžã§ã¯ãã§ãã ãã®ç¬éãã³ãŒãçæã®éæ³ãèµ·ãããŸãã ãããã£ãŠãã³ã³ããŒãã³ãã¯ã€ã³ã¿ãŒãã§ã€ã¹ãšããŠå®£èšãããŸãã
çæãããã³ãŒãã䜿çšããã³ã³ããŒãã³ãã®åæå

ããšãã°ãDaggerAppComponentã¯ã¢ããªã±ãŒã·ã§ã³å ã§åæåãããŸãã 䜿çšãããçæã³ãŒãïŒã³ã³ããŒãã³ãã®åæåïŒã¯ãçæã³ãŒãã䜿çšããããšãæå³ããããšã«æ³šæããŠãã ããã ããšãã°ãDaggerAppComponentãæ€åºã§ããŸãã åã«èŠãããã«ãDaggerãã¬ãã£ãã¯ã¹ã¯ãããŸããã§ããã 圌ã¯ã©ãããæ¥ãã®ïŒ ã¯ãããã¬ãŒã¯ã³ãŒããçæããŸããã 圌ã¯ãããååã«éãçæããŸãã ç§ãã¡ã話ããŠããæ³šå ¥ïŒãã®æ§é ã«ã€ããŠïŒã誀ã£ãŠäžæãããšãDaggerAppComponentã«ãªã£ãŠããŸããŸãã å°ãééããŠã¯ã©ã¹ã誀ã£ãŠæå®ãããšãçæã¯æ©èœããŸãã-DaggerAppComponentã¯è¡šç€ºããããã¢ã¯ãã£ããã£ãšä»ã®ã¯ã©ã¹ããã€ã³ãããéæ³ã¯ãã¹ãŠãçæãããã¯ã©ã¹ãªãã§ã¯æ©èœããŸããã ã³ã³ããŒãã³ãã¯ããªãŒå šäœã®ã«ãŒãã§ããããããããåºç€ã§ãã ãããŠããããªãã§ã¯ãä»ã®ãã¹ãŠã¯æ©èœããŸããã 以åã«ã€ã³ãžã§ã¯ã·ã§ã³ãã©ã®ããã«æ§ç¯ãããã«æ³šæããã³ã³ããŒãã³ããæ£ãã䜿çšããå¿ èŠããããŸãã
ã³ã³ããŒãã³ãã«ã¯ãã«ããŒãããããšã«ã泚æããŠãã ããã ãã«ããŒ-ãã¶ã€ã³ãã¿ãŒã³ã ãã«ããŒã«ã¯ãã³ã³ããŒãã³ããããã«æ§ç¯ããæ¹æ³ã決å®ããããã€ãã®åŒæ°ãããšãã°AppModuleã¡ãœããïŒAppModuleã€ã³ã¹ã¿ã³ã¹ã¯ã©ã¹ãåŒæ°ãšããŠååŸããèªåçæã¡ãœããïŒãããããšãç解ããŠããŸãã æã§ã¢ãžã¥ãŒã«ãäœæãããã®ãã©ã¡ãŒã¿ãŒãèšå®ããŸãã ãããŠbuildã¡ãœãããåŒã³åºããŠAppComponentãååŸããŸãã ãã®ãªã³ã¯ã«ã¯ãå®éã®ã³ãŒãã®äŸããããŸãïŒ http : //github.com/c-mars/Dagger2Scopes.git
ãããæ³šå ¥ããŠãã ããïŒ :)

Puttin 'magicã¯ã€ã³ãžã§ã¯ã·ã§ã³åŸã«ã®ã¿æ©èœããŸã...
Applicationã¯ã©ã¹ã«ã¯ããããžã®ã¢ã¯ã»ã¹ãæäŸããã¡ãœããããããŸãã ããã«ãããã¯éçã¡ãœããã§ã¯ãªããgetã¢ããªã±ãŒã·ã§ã³ããã³ã³ããã¹ããååŸããã ãã§ãã ã¯ã©ã¹ã«è¿œå ããããšãã§ããŸã-åãçµæã«ãªããããã«ã¯éæ³ã¯ãããŸããã ããããããã¯ç§ãã¡ã«ãšã£ãŠéåžžã«éèŠã§ããããã®getAppComponentããããŸãã
ã¢ã€ãã¢ã¯ãã¢ããªã±ãŒã·ã§ã³ãAppComponentãä¿åããããšã§ãã ãã®ã³ã³ããŒãã³ãã§ããã€ãã®è¿œå ã¡ãœãããåŒã³åºããŠãããæ³šå ¥ã¡ãœãããé©çšããŸãã ãæ°ã¥ãã®ããã«ãããã¯ã³ã³ããŒãã³ãã§å®£èšããç¹å®ã®ã¯ã©ã¹ã瀺ãæ³šå ¥ã§ãã ãã®å Žåãããã¯LoginActivityã¯ã©ã¹ã§ãã ã¢ãããŒã·ã§ã³ã«ã€ã³ãžã§ã¯ã·ã§ã³ã衚瀺ãããŸããäŸåé¢ä¿ãã©ã®ããã«ã€ã³ãžã§ã¯ããããã確èªããŠãã ããã éæ³ã¯æ³šå°åŸã«ã®ã¿æ©èœããŸãã
ã«ã¹ã¿ã ã¹ã³ãŒããšå¹ççãªã¡ã¢ãªç®¡ç
ãããã£ãŠãã«ã¹ã¿ã ã¹ã³ãŒãã¯ãã€ã³ã¹ã¿ã³ã¹åãããã¯ã©ã¹ã«ç¹å®ã®æå¹æéãæäŸããã®ã«åœ¹ç«ã¡ãŸãã
ãªããžã§ã¯ãã®ã©ã€ããµã€ã¯ã«

åç èè -Azimoã®Miroslaw Stanek
http://frogermcs.github.io/dagger-graph-creation-performance
ããšãã°ãããªãã掻åãããŠããŠã圌ããååã«é·ãçããŠããªãå Žåãç»é¢äžã®ãã®ããå¥ã®ãã®ã«è¡ãããã¹ãŠã殺ããŸãã ã€ãŸããã¢ã¯ãã£ããã£ã«æ³šå ¥ããããã¹ãŠã®ãã®ã¯ãã®åŸã¯ãªãŒã³ã¢ããã§ããã¢ããªã±ãŒã·ã§ã³ã¯ããå°ãªãã¡ã¢ãªãæ¶è²»ããŸãã ãŠãŒã¶ãŒãªã©ã®ãŠãŒã¶ãŒããŒã¿ã®ã¯ã©ã¹ã¯ããã°ã€ã³éã§æå¹ã§ãã ã¢ããªã±ãŒã·ã§ã³ã¹ã³ãŒãã¯ãæãéèŠãªã«ãŒãã¹ã³ãŒãã§ãããæãé·ãåç¶ããŸãã
ãããŠåã³åãå
¥ãå人圢
ã³ã³ããŒãã³ãã«ã¯ã¹ã³ãŒãããããŸã

åç èè -Azimoã®Miroslaw Stanek
http://frogermcs.github.io/dagger-graph-creation-performance/
ãã®ç¥ç§çãªããã©ã¹ã...

ã§ã¯ããã©ã¹ã«æ³šç®ããŸãããã
ãµãã³ã³ããŒãã³ã宣èš

ã¹ã³ãŒãã¢ãããŒã·ã§ã³ã䜿çšãããšãç¹å®ã®ã©ã€ãã¿ã€ã ã®ã¹ã³ãŒããçæã§ããŸãã ããšãã°ãActivityScopeã¯ãã¢ã¯ãã£ããã£ãåç¶ããéãåç¶ããŸãã ã³ã³ããŒãã³ãã«ãµãã³ã³ããŒãã³ããšããŠæ³šéãä»ããŸãã
ããããã¢ãžã¥ãŒã«ããããŸããïŒ

å éšã®ããŒã¿ã¯ãã«ãŒãã³ã³ããŒãã³ããšåãæ¹æ³ã§èšè¿°ãããŸãã 1ã€ã®ããšãé€ããŠãplusãåŒã³åºããããã«ã¢ãžã¥ãŒã«ãæž¡ããŠã€ã³ã¹ã¿ã³ã¹åãããšãå¿ èŠãªãµãã³ã³ããŒãã³ããååŸãããŸãã
äŸåé¢ä¿ããªãŒã®ã«ãŒãã«ãµãã³ã³ããŒãã³ããè¿œå ãã

ããã¯äœã®ããã«äœ¿ãããŸããïŒ ãã®ãããã€ã³ã¿ãŒãã§ã€ã¹ãšããŠå®£èšã§ããã¹ã³ãŒãã¯ããªããžã§ã¯ãã®å¯¿åœãå¶éããŸãã
æœè±¡ã¹ã³ãŒã


ãã®çš®é¡ã®ã¹ã³ãŒãã¯ãæ³šå ¥å ã«å¿ããŠãã©ã€ãã¿ã€ã ãéçã«å¶éããŸãã ãããŠãããäžæ¹ã¯åçã«å¶éãããŸãã
åçãšã¯ãæåã§ç®¡çããããšãæå³ããã¬ããŒãžã³ã¬ã¯ã¿ãŒ ïŒãã¬ããŒãžã³ã¬ã¯ã¿ãŒãïŒã䜿çšããŠãã¹ãŠãåé€ãããŸãã
ã¹ã³ãŒãã«å¿ èŠãªã³ã³ããŒãã³ãã«æ³šéãä»ããŸãã
@ActivityScope


@UserScopeãããšãã°ã@ RetentionïŒRUNTIMEïŒãæã€ãã®åãã¹ã³ãŒãã®åäœæ¹æ³ã æåã§å¶åŸ¡ã§ããŸãã
@UserScope

æåã§ç®¡çããã«ã¯ãã¢ããªã±ãŒã·ã§ã³å ã®ã³ã³ããŒãã³ããžã®ãªã³ã¯ãAppComponentã®é£ã«ä¿åããŸãã

ç¹å¥ãªã¡ãœããã䜿çšããŠäœæãããŸããããã¯ãã³ãŒãã®äŸã§ãã ãã®åŸãã³ãŒãã¯ã¯ãªãŒã³ã¢ãããããŠãªãªãŒã¹ã«éä¿¡ãããã¬ããŒãžã³ã¬ã¯ã¿ãŒã¯ãããåé€ããŸãã ããã¯ãã€èµ·ãããŸããïŒ ãŠãŒã¶ãŒããã°ã¢ãŠããããšã ïŒ "logged in" ïŒã 次åãå¥ã®createUserComponentãåŒã³åºããšããã®ã³ã³ããŒãã³ãã¯ä»ã®ãŠãŒã¶ãŒããŒã¿ã§å床äœæãããŸãã
æåŸã«...äœãæ³šå ¥ããŸããïŒ
- ãã¢ããŒã¿ã¢ãžã¥ãŒã«ã
- ãã¬ãŒã³ã¿ãŒã
- ã·ã³ã°ã«ãã³ã
- ã¯ã©ã¹ã®å®è£ ããã¹ãããŸãã
- ...äŸåé¢ä¿ãã€ã³ã¹ã¿ã³ã¹åããŠäœæããä»ã®ãã¹ãŠã
å®éãã¡ã¢ãªãããå¹ççã«æ³šå ¥ããã³ãŒããèšè¿°ããã®ã«åœ¹ç«ã€äœããæ³šå ¥ããå¿ èŠããããŸãã ãã¬ãŒã³ã¿ãŒã¯å¿ ã䜿çšããå¿ èŠããããŸãã
ã·ã³ã°ã«ãã³ã¯äŸ¿å©ã§ãã ããã§çŽ¹ä»ããäŸã§ã¯ããã¢ããŒãžã§ã³ã®ã¢ãã¯ããŒã¿ãæ¿å ¥ããŸãããããã¹ãäžã«ããªãšãŒã·ã§ã³ã䜿çšããããšãã§ããŸãã
ããŒã ãªãŒãã£ã³ã°
ãµã³ãã«ã³ãŒãïŒ http : //github.com/c-mars/Dagger2Scopes.git
- ãã§ã«ãã³ãã»ã»ãã¹ãAndroidã®ãã€ã¹ãã£ã³ã°ãã¬ãŒ2ãïŒ
http://fernandocejas.com/2015/04/11/tasting-dagger-2-on-android/
- ããã¹ã©ãã»ã¹ã¿ãã¯ããã¬ãŒ2-graf creation performance /ïŒ
http://frogerms.github.io/dagger-creation-performance/
- Dagger2å
¬åŒããŒãžïŒ
http://google.github.io/dagger/
ãã¶ã€ã³ãã¿ãŒã³ã«ã€ããŠã¯Fernando Cejasãèªãããšããå§ãããŸãã Miroslav Stanekã¯ã¹ã³ãŒããéåžžã«ãã説æããŸããã 圌ã¯ã@ RetentionïŒRUNTIMEïŒãé©åã«ç®¡çããæéå ã«ã¡ã¢ãªãæ¶å»ããæ¹æ³ã«é¢ããçŽ æŽãããèšäºãæã£ãŠããŸãã ãããŠãã¡ãããå ¬åŒã®Dagger2ããŒãžãã芧ãã ããã
ã³ãŒãã®æå³
Mockã¢ãžã¥ãŒã«ã䜿çšããŠé«éã¢ãžã£ã€ã«éçºãç·šæããæçµçã«ãµãŒããŒåŽãè¿œãæããæ¹æ³ã
ç©èªã¯ãã®ãããªãã®ã§ãã ãŠããããã¹ããããžã§ã¯ãã§ã¯ãæ£ããMVPåé¢ã䜿çšããŠDagger 2ã䜿çšããŸããããéèŠãªç¹ã¯ããã®æç¹ã§ã¯ãµãŒããŒåŽããªãã£ãããšã§ãã ãããŠãããŒã¿ãåæããŠããµãŒããŒããããŒã¿ãååŸã衚瀺ãåŠçããã¢ããªã±ãŒã·ã§ã³ãäœæããŸããã äž»ãªã¿ã¹ã¯ã¯ãRESTãµãŒãã¹ã®åºçŸã«ãããRESTãµãŒãã¹ã«ãã°ããåãæ¿ããããšãã§ããããšã§ããã ã³ãŒããæåã§å€æŽããããšã«ãã£ãŠã®ã¿ããããè¿ éã«è¡ãããšãã§ããŸãã ã¢ãžã¥ãŒã«ãšã³ã³ããŒãã³ãã®å¯çšæ§ã«ããããµãŒããŒãç»å ŽããåŸãã¢ãã¯ããŒã¿ïŒã€ã³ãžã§ã¯ã·ã§ã³ã«ãã£ãŠæäŸãããïŒãREST APIããã®å®éã®ããŒã¿ã«ç°¡åã«çœ®ãæããã«ãŒãã³ã³ããŒãã³ãã®å®£èšå ã®1ã€ã®ã¢ãžã¥ãŒã«ãš1è¡ã®ã³ãŒãã®ã¿ã眮ãæããŸããã