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

クリーンアーキテクチャとiOSアプリ開発のためのVIPERと

yimajo
January 20, 2020

 クリーンアーキテクチャとiOSアプリ開発のためのVIPERと

yimajo

January 20, 2020
Tweet

More Decks by yimajo

Other Decks in Technology

Transcript

  1. ࣗݾ঺հ w BTZODBXBJUݚڀಡຊ w  w 3Y4XJGUݚڀಡຊ* ** *** w

     w 7*1&3ݚڀಡຊ* w  IUUQTTXJGUCPPUIQN
  2. ͳͥ7*1&3͔ w 7*1&3͸ΫϦʔϯΞʔΩςΫνϟ $" ΛJ04ΞϓϦ։ൃʹ෦෼తʹద༻͠ ͨ΋ͷ w 7JFX *OUFSBDUPS 1SFTFOUFS

    &OUJUZ 3PVUFSͷύʔπ͝ͱʹ੹೚Λ෼ ׂ͍ͯ͠Δ 7JFX 3PVUFS 1SFTFOUFS *OUFSBDUPS &OUJUZ %FMFHBUF *OUFSBDUPSΛॴ࣋͠ ߋ৽Λཁٻ͢Δ ૢ࡞ 3PVUFSΛॴ࣋͠ ը໘ભҠٴͼ දࣔΛߦ͏ 7JFXΛॴ࣋͠ ը໘ભҠΛ࣮ߦ͢Δ DPNQMFUJPO 3FTVMU4VDDFTT &SSPS  ໾ׂ ΠϕϯτΛ1SFTFOUFSʹ఻͑ɺ σʔλͷදࣔΛߦ͏ɻ ໾ׂ ը໘ભҠͷͨΊ࣍ͷը໘΁ͷ੍ޚΛ୲౰͢Δɻ ΤϥʔΛදࣔ͢Δ͚ͩͷ6*"MFSU$POUSPMMFSදࣔ΋ߦ͍΍͍͢ɻ ໾ׂ ϏδωεϩδοΫΛ୲౰͢Δ ໾ׂ σʔλΛΧϓηϧԽ͢Δ ໾ׂ 7JFX͔ΒͷೖྗΛड৴͠ɺ *OUFSBDUPS΁σʔλΛཁٻ͢Δɻ 6*,JUʹґଘͤͣɺ දࣔ͢Δ΋ͷΛ7JFXʹ఻͑Δɻ ॴ࣋ ௨஌ ૢ࡞ 1SFTFOUFSΛॴ࣋͠ ΞΫγϣϯΛ఻͑Δ
  3. ຊՈ7*1&3 w  w PCKDJPʹدߘ w 50%0ΞϓϦ w $PSF%BUBΛ࢖ͬͯΔ w

    ܕ΍ม਺ͷ໋໊͕ΠϚΠν w ΞϓϦىಈ࣌ʹશը໘ͷґଘ ؔ܎Λղܾ
  4. %*1Λ࢖Θͳ͍͜ͱͷ σϝϦοτΛղܾ͢Δʹ͸ w $PSF%BUB΍"MBNPpSFΛ੾Γ ସ͍͑ͨͳΒ w *OUFSBDUPSࣗମΛೖΕସ͑Δ 7JFX 3PVUFS 1SFTFOUFS

    *OUFSBDUPS &OUJUZ %FMFHBUF *OUFSBDUPSΛॴ࣋͠ ߋ৽Λཁٻ͢Δ ૢ࡞ 3PVUFSΛॴ࣋͠ ը໘ભҠٴͼ දࣔΛߦ͏ 7JFXΛॴ࣋͠ ը໘ભҠΛ࣮ߦ͢Δ DPNQMFUJPO 3FTVMU4VDDFTT &SSPS  ໾ׂ ΠϕϯτΛ1SFTFOUFSʹ఻͑ɺ σʔλͷදࣔΛߦ͏ɻ ໾ׂ ը໘ભҠͷͨΊ࣍ͷը໘΁ͷ੍ޚΛ୲౰͢Δɻ ΤϥʔΛදࣔ͢Δ͚ͩͷ6*"MFSU$POUSPMMFSදࣔ΋ߦ͍΍͍͢ɻ ໾ׂ ϏδωεϩδοΫΛ୲౰͢Δ ໾ׂ σʔλΛΧϓηϧԽ͢Δ ໾ׂ 7JFX͔ΒͷೖྗΛड৴͠ɺ *OUFSBDUPS΁σʔλΛཁٻ͢Δɻ 6*,JUʹґଘͤͣɺ දࣔ͢Δ΋ͷΛ7JFXʹ఻͑Δɻ ॴ࣋ ௨஌ ૢ࡞ 1SFTFOUFSΛॴ࣋͠ ΞΫγϣϯΛ఻͑Δ
  5. %*1Λ࢖Θͳ͍͜ͱͷ σϝϦοτΛղܾ͢Δʹ͸ w $PSF%BUB3FBMNͳͲʹґଘ ͠ͳ͍Α͏ʹ w σʔλߏ଄ ʢ.BOBHFE0CKFDU 3FBMN0CKFDUʣΛϓϨʔϯ ͳ4USVDUʹม׵ͯ͠7JFX·

    Ͱ͍࣋ͬͯ͘ 7JFX 3PVUFS 1SFTFOUFS %FMFHBUF *OUFSBD ߋ৽Λ 3PVUFSΛॴ࣋͠ ը໘ભҠٴͼ දࣔΛߦ͏ 7JFXΛॴ࣋͠ ը໘ભҠΛ࣮ߦ͢Δ DPNQMFUJPO 3FTVMU ໾ׂ ΠϕϯτΛ1SFTFOUFSʹ఻͑ɺ σʔλͷදࣔΛߦ͏ɻ ໾ׂ ը໘ભҠ ΤϥʔΛ ໾ׂ 7JFX͔ΒͷೖྗΛड৴͠ *OUFSBDUPS΁σʔλΛཁ 6*,JUʹґଘͤͣɺ දࣔ͢Δ΋ͷΛ7JFXʹ఻ ॴ࣋ ௨஌ ૢ࡞ 1SFTFOUFSΛॴ࣋͠ ΞΫγϣϯΛ఻͑Δ ٭஫͜Ε͸ಛผ7*1&3తͳղܾํ๏ͱ͍͏Θ͚Ͱ͸͋Γ·ͤΜ
  6. 6TF$BTF protocol UseCase where Failure: Error { associatedtype Parameters //

    Ҿ਺ͷܕ associatedtype Success // ੒ޭͨ͠ࡍͷܕ associatedtype Failure // ࣦഊ࣌ͷError΋NeverʹͰ͖ΔΑ͏ʹ func execute(_ parameters: Parameters, completion: ((Result<Success, Failure>) -> ())?) func cancel() } 7*1&3Λ࢖͍ͨ͘ͳΔཁٻͬͯɺܕʹቕΊΒΕ੍ͨ໿ͷ΋ͱͰ νʔϜͰϒϨͳ͘ϓϩάϥϛϯά͕͍ͨ͠Μ͡Όͳ͍ͷ͔ͳͱ
  7. 1SFTFOUFSΛςετ͍ͨ͠ͳΒ 5FTU%PVCMF 7JFX 5FTU%PVCMF 3PVUFS 1SFTFOUFS 5FTU%PVCMF *OUFSBDUPS &OUJUZ ςετ༻ͷσʔλ

    ΋͘͠͸ςετ༻ΤϥʔΛग़ྗ͢Δ ༻ҙͨ͠ςετσʔλΛηοτ͠ɺ ৗʹͦΕΛग़ྗ͢Δɻ 1SFTFOUFSͷΤϥʔϋϯυϦϯάΛ ςετ͚ͨ͠Ε͹ɺ ΤϥʔΛฦͤΔผͷ5FTU%PVCMF΋ ༻ҙ͢Δɻ 1SFTFOUFSͷग़ྗͱͯ͠7JFXͷEFMFHBUFϝιου͕ಈ࡞ɻ ͦͷϝιου͔Βظ଴஋ͱΛൺֱ͢Δ ظ଴஋ͱͷൺֱݕূՕॴ ςετίʔυ͔Βͷݺͼग़͠ 1SFTFOUFSͷग़ྗͱͯ͠3PVUFSʹσʔλ͕౉͞ΕΔ ͦͷϝιου͔Βظ଴஋ͱΛൺֱ͢Δ
  8. ༨ஊ w ΫϦʔϯΞʔΩςΫνϟͰ΋ந৅Ͱ͸ͳ͘۩৅Λ࢖͍ͬͯ Δྫ͸͋Δʢ$"ຊୈষʣ w 4USJOH͸҆ఆͨ͠۩৅ͳͷͰґଘ͍͍ͯ͠ w 4USJOH͕ίϩίϩมΘΔ͜ͱ͸ؾʹ͠ͳ͍͍ͯ͘ w ґଘͨ͘͠ͳ͍ͷ͸มԽ͠΍͍͢۩৅ཁૉ

    ͨ·ʹϝδϟʔόʔδϣϯͰ࢓༷มΘͬͨΓ͢Δ3Y4XJGUΛ શϨΠϠʔͰ࢖ͬͯͦΕʹґଘ͢Δͷ͸ΫϦʔϯΞʔΩςΫνϟతͰ͸ͳ͍͚Ͳ ͦΕ͸֮ޛ͕͋ͬͯ΍ΔΜͳΒྑ͍ͱࢥ͍·͢