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
CleanArchitecture For Android
Search
MinoHiroki
January 14, 2017
Technology
2.1k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CleanArchitecture For Android
CleanArchitectureを参考に、Androidアプリをつくってみたことの紹介
MinoHiroki
January 14, 2017
Other Decks in Technology
See All in Technology
NDIAS CTF 2026 問題解説会資料
bata_24
0
150
MySQL & MySQL HeatWave Report - June 2026
freshdaz
0
250
AIをフル活用してオンコール機能のプロトタイプを2日で作った話 / Building an AI-Powered On-Call Prototype in Just Two Days
nari_ex
0
160
AWS Summit Japan 2026の振り返りと2027へ向けて / AWS Summit Japan 2026 Recap and Prospects for 2027
kaminashi
1
150
知見・人・API・DB・予算 ─ ナイナイ尽くしだった人事データ整備 with dbt、5年間の学び
ken6377
1
110
“詰む”前に仕組みを作れ 〜技術の波に溺れないためのキャッチアップ術〜
takasyou
8
4.7k
AI・ロボティクスと自動化社会 / AI, Robotics, and the Automated Society
ks91
PRO
0
120
AI Agentをシステムに組み込む前にゆるく向き合ってみる
hayama17
0
180
「軸足」は 固定しなくていい - 熱量と強みで描く、しなやかなキャリアの形
kakehashi
PRO
1
310
SRE歴2ヶ月でも開発6年の知見を活かして、チームで止まっていた環境改善を前に進めた話
a_ono
0
160
CVE-2026-20833_脆弱性対応とAES 化について
jukishiya
0
300
AWS Summit の片隅で、体育座りしながらコミュニティがにぎわう理由を考えた
k_adachi_01
2
330
Featured
See All Featured
Navigating Team Friction
lara
192
16k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
55k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
550
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
360
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
420
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
640
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
350
Building the Perfect Custom Keyboard
takai
2
800
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
170
Transcript
CleanArchitectureϕʔεͰ AndroidΞϓϦͭͬͯ͘Έͨ
ࣗݾհ ❖ 2014CyberAgent৽ଔೖࣾ ❖ androidྺ2 ❖ AMESTAGEͷandroid։ൃΛ୲ ❖ झຯɿήʔϜɾΞχϝɾΞΠυϧ ࡾ
߂وʢMino Hirokiʣ
AMESTAGEհ
None
࣍ ❖ CleanArchitectureͱʁ ❖ CleanArchitectureʹج͍ͮͨAndroid։ൃ ❖ ;Γ͔͑Γ
࣍ ❖ CleanArchitectureͱʁ ❖ CleanArchitectureʹج͍ͮͨAndroid։ൃ ❖ ;Γ͔͑Γ
CleanArchitectureͱʁ υϝΠϯۦಈ։ൃʢDDDʣɺϢʔεέʔεۦಈ։ൃʢUCDDʣͳͲΛϕʔεʹఏҊ͞Εͨɺ ֤ػೳΛͭͷΛͬͨԁܗͷϨΠϠʔʹ͚ɺ֤ϨΠϠʔؒʹґଘؔͷϧʔϧΛ࣋ͨͤͨઃܭࢥɻ UIͱϏδωεϩδοΫΛΩϨΠʹ͚Δ͜ͱ͕Ͱ͖ɺݻ༗ͷϑϨʔϜϫʔΫσʔλετΞʹґଘ͠ͳ͍ͱ͍͏ ͷ͕࠷େͷϝϦοτɻ
CleanArchitectureͱʁ 4ͭͷϨΠϠʔ ଆͷԁ΄ͲαʔϏεͷࠜװͱͳΔߴ࣍ͷ֓೦ɻ ֎ଆ۩ମతͳ%#6*ͳͲɺৄࡉͳ֓೦ɻ
CleanArchitectureͱʁ Enterprise Business RulesʢEntitiesʣ αʔϏεશମʹڞ௨͢ΔϏδωεϧʔϧɻ͜ͷઃܭʹ͓͚Δ࠷ߴϨϕϧͷϧʔϧɻ ྫʣAMESTAGEͷ߹ɺνϟϯωϧใ์ૹใɺϢʔβʔใͳͲͷఆٛɻ
CleanArchitectureͱʁ Application Business RulesʢUseCasesʣ ΞϓϦέʔγϣϯݻ༗ͷϏδωεϧʔϧɻʢࠓճͷ߹ʣAndroidΞϓϦ͕ඞཁͱ͢ΔϏδωεϩδοΫ͕͜͜ʹೖΔɻ ྫʣ์ૹIDΛݩʹ์ૹใΛऔಘ͢ΔɺTwitter࿈ܞใΛݩʹαʔϏεͷೝূΛߦ͏ͳͲɻ
CleanArchitectureͱʁ Interface AdaptersʢControllers/Presenters/Gatewaysʣ UIDBͳͲͷ֎෦ػؔͱɺϢʔεέʔεΤϯςΟςΟͳͲͷυϝΠϯʢαʔϏεͷࠜװʣͱͷؒͷڮ͠ͷͨΊͷɺ σʔλมΛߦ͏Adapter܈ɻ͜ͷUIDBʹؔ͢ΔใΛ͍ͬͯΔ͕ɺEntity UseCaseΒͳ͍ɻ
CleanArchitectureͱʁ Frameworks & DriversʢWeb / UI / DB …ʣ ͜ͷઃܭʹ͓͚Δ࠷֎ɻDBUIϑϨʔϜϫʔΫͳͲ͕͜͜ʹଐ͢Δɻ
FY 42-ωοτϫʔΫͷίʔυɺ6*ͷඳըͳͲ
CleanArchitectureͱʁ ґଘؔͷϧʔϧ ԁͷ֎ଆͷ͕ଆͷʹґଘ͢Δɻʢଆͷ֎ଆͷͷ͜ͱΛΒͳ͍ʣ ଆͷͷ͕֎ଆͷͷΛར༻͢Δͱ͖ɺΠϯλʔϑΣʔεΛఆٛͯ͠ʢ͞ΒʹDIͱΈ߹ΘͤΔ͜ͱʹΑΓʣɺૄͳؔ Λ่͞ͳ͍ɻʢϢʔεέʔε͕DBΛѻ͏߹RepositoryΠϯλʔϑΣʔεΛఆٛ͢Δʣ
࣍ ❖ CleanArchitectureͱʁ ❖ CleanArchitectureʹج͍ͮͨAndroid։ൃ ❖ ;Γ͔͑Γ
CleanArchitectureʹج͍ͮͨAndroid։ൃ
Activity/Fragment Viewͱͯ͠ͷׂ→ViewModelͷใΛը໘ʹදࣔ ίϯτϩʔϥͱͯ͠ͷׂ→PresenterͷϦΫΤετ ViewModel ֤ը໘ͷঢ়ଶɻ Presenter ֤ը໘ݻ༗ͷϩδοΫɻ UseCase σʔλͷऔಘߋ৽ͳͲͷϏδωεϩδοΫ Entity
αʔϏε্ͷ֓೦Λͦͷ··දݱͨ͠Ϋϥε܈ɻ ϢʔβʔใɺνϟϯωϧใͳͲɻ Repository ӬଓԽσʔλͷग़͠ೖΕɻ "1*%#ͷΞΫηεΛϥοϓ͢Δɻ API DB APIϩʔΧϧDB͔Βͷσʔλͷऔಘɻ CleanArchitectureʹج͍ͮͨAndroid։ൃ
CleanArchitectureʹج͍ͮͨAndroid։ൃ Activity/Fragment Viewͱͯ͠ͷׂ→ViewModelͷใΛը໘ʹදࣔ ίϯτϩʔϥͱͯ͠ͷׂ→PresenterͷϦΫΤετ ViewModel ֤ը໘ͷঢ়ଶɻ Presenter ֤ը໘ݻ༗ͷϩδοΫɻ UseCase σʔλͷऔಘߋ৽ͳͲͷϏδωεϩδοΫ
Entity αʔϏε্ͷ֓೦Λͦͷ··දݱͨ͠Ϋϥε܈ɻ ϢʔβʔใɺνϟϯωϧใͳͲɻ Repository ӬଓԽσʔλͷग़͠ೖΕɻ "1*%#ͷΞΫηεΛϥοϓ͢Δɻ API DB APIϩʔΧϧDB͔Βͷσʔλͷऔಘɻ
֎෦ͷӬଓԽػߏ͔Βσʔλ͕ฦ͍ͬͯ͘ྲྀΕɺ RxJavaΛར༻ͯ͠ObservableͷܗͰฦ͢ɻʢίʔυ ͕γϯϓϧʹͳΔͷͰʣ CleanArchitectureʹج͍ͮͨAndroid։ൃ
ԁͷଆ͔Β֎ଆʹ͔͏ՕॴInterfaceΛఆٛ͠ ͯɺ֎ଆͷΫϥε͜ΕΛimplements͢Δɻ ͜ΕʹΑΓɺଆͷΫϥε͕֎ଆͷΫϥεʹґଘ͠ͳ ͍Α͏ʹ͢ΔɻʢDIʹDagger2Λར༻ʣ CleanArchitectureʹج͍ͮͨAndroid։ൃ
| |- mobile | | | |- ui | |-
user // Activity/Fragment&Presenter&ViewModel | |- UserActivity | |- UserComponent | |- UserPresenter | |- UserView | |- UserViewModel | |- core | |- user | |- repository // Repository & Dao /Api | | |- UserRepositoryImpl | | |- UserApi | | |- UserDao | | | |- usecase // UseCase | | |- GetLoginUser | | | |- User // Entity | ύοέʔδߏ CleanArchitectureʹج͍ͮͨAndroid։ൃ
CleanArchitectureʹج͍ͮͨAndroid։ൃ ۩ମతͳίʔυͷհ αϯϓϧɿϩάΠϯϢʔβʔใΛදࣔ͢Δը໘
| |- core | |- user | |- repository //
Repository & Dao /Api | | |- UserRepositoryImpl | | |- UserApi | | |- UserDao | | | |- usecase // UseCase | | |- GetLoginUser | | | |- User // Entity | CleanArchitectureʹج͍ͮͨAndroid։ൃ
Entity CleanArchitectureʹج͍ͮͨAndroid։ൃ Entityͷׂ ɾαʔϏεͷࠜװͱͳΔ֓೦ͷఆٛΛߦ͏
UseCase CleanArchitectureʹج͍ͮͨAndroid։ൃ UseCaseͷׂ ɾΞϓϦέʔγϣϯͷϏδωεϩδοΫ ɾThreadͷઃఆɻ࣮ߦผεϨουɺ݁ՌΛฦ͢ͷϝΠϯεϨουɻʢ࣮ࡍͷ։ൃͰجఈΫϥεͰߦ͍ͬͯΔʣ ɾϦϙδτϦΛར༻ͨ͠ॲཧɻෳϦϙδτϦΛར༻͢Δ͜ͱ͋Δɻ ɹʮϩάΠϯϢʔβʔΛऔಘ͔ͯ͠ΒϢʔβʔͷνϟϯωϧใΛऔಘ͢ΔʯͳͲ
UseCase CleanArchitectureʹج͍ͮͨAndroid։ൃ UseCaseͷׂ ɾΞϓϦέʔγϣϯͷϏδωεϩδοΫ ɾThreadͷઃఆɻ࣮ߦผεϨουɺ݁ՌΛฦ͢ͷϝΠϯεϨουɻʢجఈΫϥεͰߦ͍ͬͯΔɻίʔυׂѪʣ ɾϦϙδτϦΛར༻ͨ͠ॲཧɻෳϦϙδτϦΛར༻͢Δ͜ͱ͋Δɻ ɹʮϩάΠϯϢʔβʔΛऔಘ͔ͯ͠ΒϢʔβʔͷνϟϯωϧใΛऔಘ͢ΔʯͳͲ
Repository CleanArchitectureʹج͍ͮͨAndroid։ൃ Repositoryͷׂ ɾӬଓԽػߏʹର͢ΔγϯϓϧͳΠϯλʔϑΣʔεΛఏڙ ɾ۩ମతͳDBAPIͷ࣮ผΫϥεʹఆٛ͠ɺͦΕΛར༻͢Δ͚ͩɻʢDao/ApiͷίʔυׂѪʣ
| |- mobile | | | |- ui | |-
user // Activity/Fragment&Presenter&ViewModel | |- UserActivity | |- UserComponent | |- UserPresenter | |- UserView | |- UserViewModel CleanArchitectureʹج͍ͮͨAndroid։ൃ
Presenter CleanArchitectureʹج͍ͮͨAndroid։ൃ Presenterͷׂ ɾUIϩδοΫͷ୲͍खɻUseCaseΛ༻͍ͯɺը໘ͷඳըʹඞཁͳॲཧΛߦ͏ɻ ɾUseCaseͷ݁ՌΛViewʹ͑Δͱ͖ɺViewΠϯλʔϑΣʔεΛఆٛͯ͜͠ΕΛܦ༝͢Δ PresenterͷجఈΫϥεͰߦ͏ॲཧʢίʔυׂѪʣ ɾڞ௨ͷΤϥʔϋϯυϦϯάʢex. ڧ੍ΞοϓσʔτͷΤϥʔίʔυ͕͖ͨΒμΠΞϩάදࣔʣ ɾSubscriptionͷཧʢActivity.onDestroyͰ࣮ߦதͷॲཧΛഁغ͢Δʣ
ViewModel CleanArchitectureʹج͍ͮͨAndroid։ൃ ViewModelͷׂ ɾը໘ʹؔ͢Δঢ়ଶΛ͜͜ʹఆٛ͠ɺมߋΛActivity/Fragmentʹ௨͢Δ ɾandroid.databinding.Observableʓʓ ͕ศར
Activity/Fragment CleanArchitectureʹج͍ͮͨAndroid։ൃ Activity/Fragmentͷׂ ɾViewModelͷใΛViewʹඳը͢Δ ɾPresenterʹॲཧΛϦΫΤετ͢Δ ʢϥΠϑαΠΫϧɺΫϦοΫΠϕϯτɺetc..ʣ
| |- mobile | | | |- ui | |-
user // Activity/Fragment, Presenter, ViewModel | |- UserActivity | |- UserComponent | |- UserPresenter | |- UserView | |- UserViewModel | |- core | |- user | |- repository // Repository, Dao/Api | | |- UserRepositoryImpl | | |- UserApi | | |- UserDao | | |- UserRepositoryModule | | | |- usecase // Usecase | | |- GetLoginUser | | |- UserRepository | | | |- User // Entity | CleanArchitectureʹج͍ͮͨAndroid։ൃ ҎԼͷจࣈͷΫϥεpackageείʔϓͰఆٛͰ͖Δ
࣍ ❖ CleanArchitectureͱʁ ❖ CleanArchitectureʹج͍ͮͨAndroid։ൃ ❖ ;Γ͔͑Γ
;Γ͔͑Γ Α͔ͬͨ͜ͱ ɾ͖Ε͍ʹ͔͚Δ&͋Δఔ͓ܾ·Γͷίʔυʹͳͬͯ͘ΔͷͰɺ ɹਂ͘ߟ͑ͣʹॻ͚Δ͠ϨϏϡʔ͍͢͠ɻ ɾςετॻ͖͍͢ʢҰ൪֎ଆҎ֎୯७ͳjavaͷςετίʔυ͕ॻ͚Δʣ ɾείʔϓΛݶఆͯ͠ίʔυΛΊΔͷ͕خ͍͠ ΘΔ͔ͬͨ͜ͱɺେมͩͬͨ͜ͱ ɾ؆୯ͳػೳՃͰίʔυྔଟ͘ͳΔ ɾνʔϜͰͷڞ༗ʢGithubͷwikiΛར༻ɻ͋ͱϨϏϡʔ͠ͳ͕Βʣ
CleanArchitectureϕʔεͰAndroidΞϓϦͭͬͨ͘ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ