Upgrade to Pro — share decks privately, control downloads, hide ads and more …

何故、UseCaseは1メソッドなのか

 何故、UseCaseは1メソッドなのか

ランチタイムLT会 #1(2023年6月5日)での発表資料です。

okuzawats

June 05, 2023
Tweet

More Decks by okuzawats

Other Decks in Technology

Transcript

  1. 何故、UseCaseは1メソッドなのか

    View Slide

  2. 話す人
    • 奥澤 @okuzawats
    • Chatwork株式会社
    •ビジネスチャットChatwork Android版のアーキテクチャ改善業、技術負債返済業をやっています。
    •Kotlinで `operator fun get` を書くチャンスを虎視眈々と狙っています🐯

    View Slide

  3. Software Design 2023年6月号の特集、「クリーンアーキテクチャとは何か?」は読みましたか?

    View Slide

  4. 今日はこの特集の5章「モバイルアプリ開発における実践」を執筆した後で、同僚から受けたコメントに答えていこうと思います。

    View Slide

  5. UseCase

    View Slide

  6. しばしば見るUseCase

    View Slide

  7. 👆1つの画面に対して1つのUseCase型を作って、
    そこに複数のメソッドが定義されるパターン

    View Slide

  8. 一方、
    Androidのアプリアーキテクチャガイドでは👇

    View Slide

  9. アプリアーキテクチャガイドの示すUseCase

    UseCaseの担うアクションに基づいた命名
    動詞 + 名詞 / 対象 + UseCase
    `LogoutUserUseCase`
    operator修飾子を使用して `invoke()` 関数を定義することでUseCaseのインスタンスを関数として呼び出す
    `logoutUserUseCase()`
    👉このルールに従うと必然的に1 UseCase - 1 (public) メソッドになる。

    View Slide

  10. 1 UseCase 1 (public) mehtodで嬉しいこと

    UseCaseの担うアクションの再利用性が高まる
    複数の画面からログアウト処理を呼び出す場合、複数の画面でLogoutUserUseCaseを使えば良い。
    最初に出てきたSomeUseCaseのfunctionを再利用しようとすると…?
    UseCaseの保守性が高まる(凝集度が高まる)
    1クラスに書かれる処理が、ただひとつのアクションに関連する処理だけになる。テストコードも読みやすい。

    View Slide

  11. ઌ΄ͲͷྫΛॻ͖௚͢ͱ͜Μͳײ͡ʹͳΔ

    View Slide

  12. 1 UseCase - 1 (public) メソッドのメリット

    UseCaseの担うアクションの再利用性が高まる
    UseCaseの保守性が高まる(凝集度が高まる)

    View Slide

  13. 1 UseCase - 1 (public) メソッドのデメリット

    UseCaseのアクションが再利用されない場合、ただ面倒くさい
    何らかのアクションを追加するたび、UseCaseのinterfaceを作って、実装クラスを作って、テストクラスを作って、Hiltのモジュールを作って…という「面倒くささ」のコストを正当化しにくい

    View Slide

  14. こっちのパターンが絶対にダメとまでは言いにくい🤔

    View Slide

  15. まとめ

    UseCaseは、1 UseCase - 1メソッドで作れると嬉しい🤗
    実装クラス、テストクラスが圧倒的に美しい✨(個人の感想)
    UseCaseが再利用されない場合、面倒くささが勝ちがち😅
    「これ面倒くさくないですか?」って言われたらそれまで

    View Slide

  16. 最後に

    Chatworkでは、Android アプリエンジニアを募集しています!
    (それ以外の職種も絶賛募集中です!)

    View Slide

  17. 参考文献

    Software Design 2023年6月号, 技術評論社
    Android Developer, ドメインレイヤ, retrieved from https://developer.android.com/jetpack/guide/domain-layer?hl=ja (最終アクセス日:2023年5月27日)
    松岡幸一郎, (2020), ドメイン駆動設計 モデリング/実践ガイド

    View Slide