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
Navigationを見据えたリファクタリング -マルチモジュール化を添えて-
Search
Keisuke kiuchi
August 19, 2019
Programming
1
2.9k
Navigationを見据えたリファクタリング -マルチモジュール化を添えて-
Bonfire Android #5
2019/8/19
Keisuke kiuchi
August 19, 2019
Tweet
Share
More Decks by Keisuke kiuchi
See All by Keisuke kiuchi
巨大なプロダクトにおける技術負債と戦った成功と失敗の軌跡(途中経過)
kiuchikeisuke
0
1.7k
ぼくのかんがえた最強のUsecaseの作り方~あるいはビジネスロジックとはなにかという1つの回答~
kiuchikeisuke
13
7.4k
良いコードを書くためにやってみてること3つ.pdf
kiuchikeisuke
5
700
NavigationのNavOptions周りを覗いてみよう
kiuchikeisuke
0
770
AndroidStudioのテンプレートを覗いてみよう
kiuchikeisuke
2
930
Kotlin版CleanArchitectureのテンプレート作ったら爆速開発になった話+α
kiuchikeisuke
21
8.8k
Other Decks in Programming
See All in Programming
Kubernetesでセルフホストが簡単なNewSQLを求めて / Seeking a NewSQL Database That's Simple to Self-Host on Kubernetes
nnaka2992
0
110
Angular-Apps smarter machen mit Gen AI: Lokal und offlinefähig - Hands-on Workshop!
christianliebel
PRO
0
110
TipKitTips
ktcryomm
0
170
猫の手も借りたい!ので AIエージェント猫を作って社内に放した話 Claude Code × Container Lambda の Slack Bot "DevNeko"
naramomi7
0
260
AIコードレビューの導入・運用と AI駆動開発における「AI4QA」の取り組みについて
hagevvashi
0
470
Goの型安全性で実現する複数プロダクトの権限管理
ishikawa_pro
2
330
Takumiから考えるSecurity_Maturity_Model.pdf
gessy0129
1
140
コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions
handlename
0
200
CDIの誤解しがちな仕様とその対処TIPS
futokiyo
0
220
Go 1.26でのsliceのメモリアロケーション最適化 / Go 1.26 リリースパーティ #go126party
mazrean
1
390
GC言語のWasm化とComponent Modelサポートの実践と課題 - Scalaの場合
tanishiking
0
110
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
5
1k
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
97
6.6k
A better future with KSS
kneath
240
18k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
640
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.5k
HDC tutorial
michielstock
1
540
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.4k
Code Reviewing Like a Champion
maltzj
528
40k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
830
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.8k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.5k
Optimising Largest Contentful Paint
csswizardry
37
3.6k
Transcript
OBWJHBUJPOΛݟਾ͑ͨϦϑΝΫλϦϯά dϚϧνϞδϡʔϧԽΛఴ͑ͯd #POpSF"OESPJE ɹܒี
ܒี w ৬ۀɿ:ͷ"OESPJEΤϯδχΞ݉ҭࣇύύ w झຯͰ࡞ͬͨϞϊɿʮΒ͘ͰΜ "QQ ʯɺ ʮ$MFBO"SDIJUFDUVSF5FNQMBUF'PS,PUMJO 044 ʯ
w ͖ͳΞʔΩςΫνϟɿ$MFBO"SDIJUFDVUF w 4/4 5XJUUFS!GFJ@LPNF (JUIVC!LJVDIJLFJTVLF 2JJUB!L@LFJTVLF
એͦͷ̍ w ٕज़ॻయ ʹͯαʔΫϧඈཾ͞Μ͔ͪΒ ʮϥϊϕ෩ʹ $MFBO"SDIJUFDUVSFΛֶͿຊʯ తͳಉਓࢽग़͠·ʔ͢
એͦͷ̎
ࠓճͷωλ ϑΝΠφϯεΞϓϦΛ͕ͬͭΓ ϦϑΝΫλϦϯά͠Α͏ͱͨ࣌͠ͷग़དྷࣄ ґଘؔ ༻ؔ
"QQ ͜Μͳײ͡ͳͭΛɾɾɾ 1SFTFOUFS %BUB
͜Μͳײ͡ʹ͍ͨ͠ "QQ 1SFTFOUFS %BUB %PNBJO 'SBHNFOU 'SBHNFOU 'SBHNFOU OBWJ HBUJPO
ɾ ɾ ɾ
1SFTFOUFS OBWJHBUJPOಋೖ͢Δ্Ͱݟ͖͑ͯͨ w BQQԼͷ'SBHNFOU͕OBWJHBUJPO͔Βݟ͑ͳ͍ w Ϋϥεؒͷ૬ޓґଘ͕ଟ͘શΫϥε͕͓Ҿӽ͢͠Δ͍ͩͬͨ w ը໘ભҠܥͷॲཧ͕৭ΜͳॴʹࢄΒ͍͙ͬͯͯ͢ʹಋೖͰ͖ͳ͔ͬͨ "QQ 'SBHNFOU
'SBHNFOU ɾ ɾ ɾ 'SBHNFOU OBWJ HBUJPO 'SBHNFOU 'SBHNFOU 'SBHNFOU 'SBHNFOU TPNF$MBTT TPNF$MBTT TPNF$MBTT TPNF$MBTT
ંҊʜ
কདྷOBWJHBUJPOΛಋೖ͍͢͠ Α͏ʹϦϑΝΫλϦϯά͠Α͏
ͬͨ͜ͱ ґଘͷ͖Λٯసͤͭͭ͞ OBWJHBUJPOʹؔ࿈͢ΔॲཧΛूͨ͠
͜ΕΛɾɾɾ w 3FGBDUPSFE'SBHNFOU͔Β'SBHNFOU ͕ݟ͑ͳ͍ 1SFTFOUFS "QQ 3FGBDUPSFE 'SBHNFOU 'SBHNFOU ɾ
ɾ ɾ 'SBHNFOU
͜͏ͨ͠ w /BWJ*OUFSGBDFΛ௨ͯؒ͠తʹ'SBHNFOU ΞΫηεͰ͖ΔΑ͏ʹͨ͠ 1SFTFOUFS "QQ 3FGBDUPSFE 'SBHNFOU 'SBHNFOU ɾ
ɾ ɾ 'SBHNFOU /BWJ *OUFSGBDF /BWJ *OUFSGBDF *NQM
1SFTFOUFS "QQ ࣮ interface NaviInterface { fun getFragment2(): Fragment fun
getFragment3(data: SomeData): Fragment } class RefactoredFragment { override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { android.R.id.home -> changeFragment(naviInterface.getFragment2()) R.id.action_sub -> changeFragment(naviInterface.getFragment3(data)) } return super.onOptionsItemSelected(item) } } class NaviInterfaceImpl : NaviInterface { override fun getFragment2(): Fragment = Fragment2.newInstance() override fun getFragment3(data: SomeData): Fragment = Fragment3.newInstance(data.code, data.name) } OBWJHBUJPOΛ͏ͱ͖͜ΕΒΛ ஔ͖͑Ε0, ͩͱࢥ͏ OBWJHBUJPOʹ͢Δ࣌ ͜ΕΒΛஔ͖͑Ε0,
OBWJHBUJPO༻ͷॲཧ͕ूग़དྷͯ 1SFTFOUFS͕BQQʹґଘ͠ͳ͘ͳͬͨ
ऄͦͷ̍ w ͜ͷख๏ͬͯଞͷϨΨγʔͳ"QJ6UJMݺͼग़͠ʹ͑ΔΜ͡Όʁ ˠ:&4 1SFTFOUFS "QQ 3FGBDUPSFE 'SBHNFOU -FHBDZ6UJM ɾ
ɾ ɾ -FHBDZ"QJ -FHBDZ *OUFSGBDF -FHBDZ *OUFSGBDF *NQM -FHBDZ *OUFSGBDF -FHBDZ *OUFSGBDF -FHBDZ *OUFSGBDF *NQM -FHBDZ *OUFSGBDF *NQM
ऄͦͷ w ͦͦOBWJHBUJPOΛBQQʹ࣮͢ΕΑ͔ͬͨͷͰʁ ˠ:&4 1SFTFOUFS "QQ 3FGBDUPSFE 'SBHNFOU 'SBHNFOU ɾ
ɾ ɾ 'SBHNFOU OBWJ HBUJPO
·ͱΊ w ґଘͷ͖Λٯసͤ͞Εɺ1SFTFOUFSϞδϡʔϧ͔ΒBQQϞδϡʔϧ ͷؒతͳࢀর͕Մೳ OBWJHBUJPOҎ֎ʹ৭ΜͳγʔϯͰར༻Մೳ w ͦͦOBWJHBUJPOͷ࣮ΛBQQϞδϡʔϧͰߦ͑ґଘੑΛ ؾʹ͠ͳͯ͘ྑ͍
͓ΘΓ