Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Square/Dagger, Google/Dagger
Search
Daichi Furiya (Wasabeef)
September 24, 2014
Programming
1.6k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Square/Dagger, Google/Dagger
Daichi Furiya (Wasabeef)
September 24, 2014
More Decks by Daichi Furiya (Wasabeef)
See All by Daichi Furiya (Wasabeef)
DevFest Tokyo 2025 - Flutter のアプリアーキテクチャ現在地点
wasabeef
6
2.9k
About Flutter Architecture
wasabeef
1
320
2023 Flutter/Dart Summary
wasabeef
0
140
I/O Extended 2023 - Dart と Flutter の新機能
wasabeef
0
240
I/O Extended 2023 - Flutter 活用事例
wasabeef
10
3.1k
What it Takes to be a Flutter Developer
wasabeef
0
260
FlutterKaigi 2022 Keynote
wasabeef
1
730
Flutter Hooks を使ったアプリ開発 / App Development with the Flutter Hooks
wasabeef
2
1.5k
Flutter 2021 の振り返りと今後のアプリ開発に向けて / Looking back on Flutter 2021 and for future app development.
wasabeef
4
2.2k
Other Decks in Programming
See All in Programming
the container ship “Apple Silicon”@WWDC26 Recap -Japan-\(region).swift
shingangan
0
110
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
670
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
210
継続モナドとリアクティブプログラミング
yukikurage
3
700
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
590
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
18k
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
490
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
310
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
4.1k
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.6k
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
220
FDEが実現するAI駆動経営の現在地
gonta
2
270
Featured
See All Featured
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.8k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Designing for humans not robots
tammielis
254
26k
Producing Creativity
orderedlist
PRO
348
40k
HDC tutorial
michielstock
2
790
Paper Plane
katiecoart
PRO
2
52k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
56k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
340
sira's awesome portfolio website redesign presentation
elsirapls
0
320
Information Architects: The Missing Link in Design Systems
soysaucechin
0
1.1k
Transcript
Android Square/Dagger potatotips #9 CyberAgent, Inc. ߱ େ
About Me Wasabeef (D.Furiya) @wasabeef_jp wasabeef http://wasabeef.jp
Dagger (ObjectGraph) ɾίϯύΠϧ࣌ݕূɿϞδϡʔϧͱೖΛݕূ͢Δ ɹΞϊςʔγϣϯϓϩηοα ! ɾ࣮ߦ࣌ʹɺϦϑϨΫγϣϯΛར༻͠ͳ͍ ! ɾϝϞϦͷӨڹۃΘ͔ͣʹ͢Δ ! ɾViewͷInjectग़དྷͳ͍
Dagger ͷߏཁૉ
@Module + @Provides ґଘؔΛఏڙ͢ΔͨΊͷΈɾઃఆ
ObjectGraph ґଘؔཧͱΠϯδΣΫλ
@Inject ґଘؔΛཁٻ͢ΔͨΊͷΈ
@Module + @Provides ͷఆٛ
! public class ApiModule { ! public RestAdapter provideRestAdapter(OkHttpClient client)
{ return new RestAdapter.Builder() .setEndpoint(“http://wasabeef.jp”) .setClient(new OkClient(client)) .build(); } ! ! public OkHttpClient provideOkHttpClient() { return new OkHttpClient(); } }
@Module( injects = ExampleActivity.java ) public class ApiModule { !
public RestAdapter provideRestAdapter(OkHttpClient client) { return new RestAdapter.Builder() .setEndpoint(“http://wasabeef.jp”) .setClient(new OkClient(client)) .build(); } ! ! public OkHttpClient provideOkHttpClient() { return new OkHttpClient(); } }
@Module( injects = ExampleActivity.java ) public class ApiModule { @Provides
public RestAdapter provideRestAdapter(OkHttpClient client) { return new RestAdapter.Builder() .setEndpoint(“http://wasabeef.jp”) .setClient(new OkClient(client)) .build(); } ! @Provides public OkHttpClient provideOkHttpClient() { return new OkHttpClient(); } }
@Module( injects = ExampleActivity.java ) public class ApiModule { @Provides
@Singleton public RestAdapter provideRestAdapter(OkHttpClient client) { return new RestAdapter.Builder() .setEndpoint(“http://wasabeef.jp”) .setClient(new OkClient(client)) .build(); } ! @Provides @Singleton public OkHttpClient provideOkHttpClient() { return new OkHttpClient(); } }
ObjectGraph + @Inject ͷఆٛ
public class ExampleActivity extends Activity { ! ! RestAdapter mRestAdapter;
! @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ! mRestAdapter = new RestAdapter.Builder() .setEndpoint(“http://wasabeef.jp”) .setClient(new OkClient(new OkHttpClient())) .build(); } }
public class ExampleActivity extends Activity { private ObjectGraph mObjectGraph; !
RestAdapter mRestAdapter; ! @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ! mRestAdapter = new RestAdapter.Builder() .setEndpoint(“http://wasabeef.jp”) .setClient(new OkClient(new OkHttpClient())) .build(); } }
public class ExampleActivity extends Activity { private ObjectGraph mObjectGraph; !
RestAdapter mRestAdapter; ! @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ! mObjectGraph = ObjectGraph.create(new ApiModule()); mObjectGraph.inject(this); ! ! } }
public class ExampleActivity extends Activity { private ObjectGraph mObjectGraph; !
@Inject RestAdapter mRestAdapter; ! @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ! mObjectGraph = ObjectGraph.create(new ApiModule()); mObjectGraph.inject(this); ! ! } }
ObjectGraph.plus
public class SignUpActivity extends Activity { private ObjectGraph mObjectGraph; !
@Inject RestAdapter mRestAdapter; ! @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ! ExampleApp app = (ExampleApp) getApplication(); mObjectGraph = app.getObjectGraph(); mObjectGraph.plus(new SignUpModule()); mObjectGraph.inject(this); } }
Google/Dagger
Square/Daggerͱͷҧ͍ ɾτϨʔαϏϦςΟ “Open Declaration”“Find usages”ͳͲͰɺݺͼग़͠ݩͷτϨʔε͕ग़དྷΔ ! ɾ໌֬ͳAPI “@Module”ΛΘ͔Γ͘͢͠ɺ”@Component”, “@Subcomponent”ͷՃ !
ɾύϑΥʔϚϯε্ ReflectionΘͳ͍ ࣗಈੜ͞ΕΔίʔυΛखॻ͖ͷΑ͏ʹͳίʔυ࣭ʹ͚ۙͮΔ
Google/Dagger ! ։ൃதͳͷͰ ػೳFix͏গ͔͔͠Γͦ͏ɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠