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
何故、UseCaseは1メソッドなのか
Search
okuzawats
June 05, 2023
Technology
3
1.1k
何故、UseCaseは1メソッドなのか
ランチタイムLT会 #1(2023年6月5日)での発表資料です。
okuzawats
June 05, 2023
Tweet
Share
More Decks by okuzawats
See All by okuzawats
「勉強になった」で終わらせない、ストロングスタイルの勉強会
okuzawats
0
200
10年モノのAndroidアプリのコード品質を改善していく、3つの取り組み
okuzawats
0
900
Androidアプリ開発におけるSonarCloudの活用
okuzawats
0
550
例外を投げるな、値を返せ
okuzawats
9
7.2k
GitHub ActionsでAndroidアプリのテストを回しまくってたら全プロジェクトのCI/CDが完全停止する寸前だった件
okuzawats
0
270
Kotlinのifを愛でる
okuzawats
0
190
Say good-bye to Kotlin Android Extensions
okuzawats
0
170
KDoc in a nutshell
okuzawats
0
210
Other Decks in Technology
See All in Technology
Google Cloud の AI を支える裏側のインフラを垣間見る!
maroon1st
0
360
今年のRubyKaigiはProfiler Year🤘
osyoyu
0
170
Azure Container Apps + Bicep 〜 こんな感じで運用しています
kaz29
2
480
ゼロから始めるVue.jsコミュニティ貢献 / first-vuejs-community-contribution-link-and-motivation
lmi
1
130
いつか使うかも貯金してたらめちゃめちゃ機能が増えてた話
riyaamemiya
0
350
私が trocco を推す理由
__allllllllez__
1
260
非同期推論システムによるコスト削減と信頼性向上
koki_nishihara
0
260
開発生産性大幅アップ!Postman VS Code拡張機能
nagix
2
390
Cypress or Playwright?
rainerhahnekamp
0
110
Delivering Millions of Messages within seconds @ Duolingo
pelelgrino
0
350
一生覚えておきたい「システム開発=コミュニケーション」〜初めての実務案件振り返りLT〜
maimyyym
1
170
Terraformあれやこれ/terraform-this-and-that
emiki
8
1.4k
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
648
58k
Why Our Code Smells
bkeepers
PRO
331
56k
Happy Clients
brianwarren
92
6.4k
Gamification - CAS2011
davidbonilla
76
4.6k
Principles of Awesome APIs and How to Build Them.
keavy
121
16k
Automating Front-end Workflow
addyosmani
1356
200k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
40
4.4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
241
1.2M
ReactJS: Keep Simple. Everything can be a component!
pedronauck
659
120k
Build The Right Thing And Hit Your Dates
maggiecrowley
24
2k
Bash Introduction
62gerente
604
210k
Designing on Purpose - Digital PM Summit 2013
jponch
110
6.5k
Transcript
何故、UseCaseは1メソッドなのか
話す人 • 奥澤 @okuzawats • Chatwork株式会社 •ビジネスチャットChatwork Android版のアーキテクチャ改善業、技術負債返済業をやっています。 •Kotlinで `operator
fun get` を書くチャンスを虎視眈々と狙っています🐯
Software Design 2023年6月号の特集、「クリーンアーキテクチャとは何か?」は読みましたか?
今日はこの特集の5章「モバイルアプリ開発における実践」を執筆した後で、同僚から受けたコメントに答えていこうと思います。
UseCase
しばしば見るUseCase
👆1つの画面に対して1つのUseCase型を作って、 そこに複数のメソッドが定義されるパターン
一方、 Androidのアプリアーキテクチャガイドでは👇
アプリアーキテクチャガイドの示すUseCase UseCaseの担うアクションに基づいた命名 動詞 + 名詞 / 対象 + UseCase `LogoutUserUseCase`
operator修飾子を使用して `invoke()` 関数を定義することでUseCaseのインスタンスを関数として呼び出す `logoutUserUseCase()` 👉このルールに従うと必然的に1 UseCase - 1 (public) メソッドになる。
1 UseCase 1 (public) mehtodで嬉しいこと UseCaseの担うアクションの再利用性が高まる 複数の画面からログアウト処理を呼び出す場合、複数の画面でLogoutUserUseCaseを使えば良い。 最初に出てきたSomeUseCaseのfunctionを再利用しようとすると…? UseCaseの保守性が高まる(凝集度が高まる) 1クラスに書かれる処理が、ただひとつのアクションに関連する処理だけになる。テストコードも読みやすい。
ઌ΄ͲͷྫΛॻ͖͢ͱ͜Μͳײ͡ʹͳΔ
1 UseCase - 1 (public) メソッドのメリット UseCaseの担うアクションの再利用性が高まる UseCaseの保守性が高まる(凝集度が高まる)
1 UseCase - 1 (public) メソッドのデメリット UseCaseのアクションが再利用されない場合、ただ面倒くさい 何らかのアクションを追加するたび、UseCaseのinterfaceを作って、実装クラスを作って、テストクラスを作って、Hiltのモジュールを作って…という「面倒くささ」のコストを正当化しにくい
こっちのパターンが絶対にダメとまでは言いにくい🤔
まとめ UseCaseは、1 UseCase - 1メソッドで作れると嬉しい🤗 実装クラス、テストクラスが圧倒的に美しい✨(個人の感想) UseCaseが再利用されない場合、面倒くささが勝ちがち😅 「これ面倒くさくないですか?」って言われたらそれまで
最後に Chatworkでは、Android アプリエンジニアを募集しています! (それ以外の職種も絶賛募集中です!)
参考文献 Software Design 2023年6月号, 技術評論社 Android Developer, ドメインレイヤ, retrieved from
https://developer.android.com/jetpack/guide/domain-layer?hl=ja (最終アクセス日:2023年5月27日) 松岡幸一郎, (2020), ドメイン駆動設計 モデリング/実践ガイド