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

Navigationを見据えたリファクタリング -マルチモジュール化を添えて-

Navigationを見据えたリファクタリング -マルチモジュール化を添えて-

Bonfire Android #5
2019/8/19

Keisuke kiuchi

August 19, 2019
Tweet

More Decks by Keisuke kiuchi

Other Decks in Programming

Transcript

  1. OBWJHBUJPOΛݟਾ͑ͨϦϑΝΫλϦϯά

    dϚϧνϞδϡʔϧԽΛఴ͑ͯd
    #POpSF"OESPJE
    ໦಺ɹܒี

    View Slide

  2. ໦಺ܒี
    w ৬ۀɿ:ͷ"OESPJEΤϯδχΞ݉ҭࣇύύ
    w झຯͰ࡞ͬͨϞϊɿʮΒ͘ͰΜ "QQ
    ʯɺ

    ʮ$MFBO"SDIJUFDUVSF5FNQMBUF'PS,PUMJO 044
    ʯ
    w ޷͖ͳΞʔΩςΫνϟɿ$MFBO"SDIJUFDVUF
    w 4/4

    5XJUUFS!GFJ@LPNF

    (JUIVC!LJVDIJLFJTVLF

    2JJUB!L@LFJTVLF

    View Slide

  3. એ఻ͦͷ̍
    w ٕज़ॻయ
    ʹͯαʔΫϧඈཾ͞Μ͔ͪΒ

    ʮϥϊϕ෩ʹ

    $MFBO"SDIJUFDUVSFΛֶͿຊʯ

    తͳಉਓࢽग़͠·ʔ͢

    View Slide

  4. એ఻ͦͷ̎

    View Slide

  5. ࠓճͷωλ
    ϑΝΠφϯεΞϓϦΛ͕ͬͭΓ

    ϦϑΝΫλϦϯά͠Α͏ͱͨ࣌͠ͷग़དྷࣄ
    ґଘؔ܎
    ࢖༻ؔ܎

    View Slide

  6. "QQ
    ͜Μͳײ͡ͳ΍ͭΛɾɾɾ
    1SFTFOUFS
    %BUB

    View Slide

  7. ͜Μͳײ͡ʹ͍ͨ͠
    "QQ
    1SFTFOUFS
    %BUB
    %PNBJO
    'SBHNFOU
    'SBHNFOU
    'SBHNFOU
    OBWJ
    HBUJPO
    ɾ
    ɾ
    ɾ

    View Slide

  8. 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

    View Slide

  9. ં஭Ҋʜ

    View Slide

  10. কདྷOBWJHBUJPOΛಋೖ͠΍͍͢
    Α͏ʹϦϑΝΫλϦϯά͠Α͏

    View Slide

  11. ΍ͬͨ͜ͱ
    ґଘͷ޲͖Λٯసͤͭͭ͞
    OBWJHBUJPOʹؔ࿈͢ΔॲཧΛू໿ͨ͠

    View Slide

  12. ͜ΕΛɾɾɾ
    w 3FGBDUPSFE'SBHNFOU͔Β͸'SBHNFOU ͕ݟ͑ͳ͍
    1SFTFOUFS
    "QQ
    3FGBDUPSFE

    'SBHNFOU
    'SBHNFOU
    ɾ
    ɾ
    ɾ
    'SBHNFOU

    View Slide

  13. ͜͏ͨ͠
    w /BWJ*OUFSGBDFΛ௨ͯؒ͠઀తʹ'SBHNFOU ΁ΞΫηεͰ͖ΔΑ͏ʹͨ͠
    1SFTFOUFS
    "QQ
    3FGBDUPSFE

    'SBHNFOU
    'SBHNFOU
    ɾ
    ɾ
    ɾ
    'SBHNFOU /BWJ

    *OUFSGBDF
    /BWJ

    *OUFSGBDF

    *NQM

    View Slide

  14. 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,

    View Slide

  15. OBWJHBUJPO༻ͷॲཧ͕ू໿ग़དྷͯ

    1SFTFOUFS͕BQQʹґଘ͠ͳ͘ͳͬͨ

    View Slide

  16. ऄ଍ͦͷ̍
    w ͜ͷख๏ͬͯଞͷϨΨγʔͳ"QJ΍6UJMݺͼग़͠ʹ΋࢖͑ΔΜ͡Όʁ

    ˠ:&4
    1SFTFOUFS
    "QQ
    3FGBDUPSFE

    'SBHNFOU
    -FHBDZ6UJM
    ɾ
    ɾ
    ɾ
    -FHBDZ"QJ -FHBDZ

    *OUFSGBDF
    -FHBDZ

    *OUFSGBDF

    *NQM
    -FHBDZ

    *OUFSGBDF
    -FHBDZ

    *OUFSGBDF
    -FHBDZ

    *OUFSGBDF

    *NQM
    -FHBDZ

    *OUFSGBDF

    *NQM

    View Slide

  17. ऄ଍ͦͷ
    w ͦ΋ͦ΋OBWJHBUJPOΛBQQ಺ʹ࣮૷͢Ε͹Α͔ͬͨͷͰ͸ʁ

    ˠ:&4
    1SFTFOUFS
    "QQ
    3FGBDUPSFE

    'SBHNFOU
    'SBHNFOU
    ɾ
    ɾ
    ɾ
    'SBHNFOU OBWJ

    HBUJPO

    View Slide

  18. ·ͱΊ
    w ґଘͷ޲͖Λٯసͤ͞Ε͹ɺ1SFTFOUFSϞδϡʔϧ͔ΒBQQϞδϡʔϧ΁
    ͷؒ઀తͳࢀর͕Մೳ OBWJHBUJPOҎ֎ʹ΋৭ΜͳγʔϯͰར༻Մೳ

    w ͦ΋ͦ΋OBWJHBUJPOͷ࣮૷ΛBQQϞδϡʔϧͰߦ͑͹ґଘੑΛ

    ؾʹ͠ͳͯ͘ྑ͍

    View Slide

  19. ͓ΘΓ

    View Slide