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

7d1521d950d9bc5697868830cb04ff2f?s=47 yimajo
January 20, 2020

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

7d1521d950d9bc5697868830cb04ff2f?s=128

yimajo

January 20, 2020
Tweet

Transcript

  1. 15.

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

     w 7*1&3ݚڀಡຊ* w  IUUQTTXJGUCPPUIQN
  2. 16.
  3. 18.

    ͳͥ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Λॴ࣋͠ ΞΫγϣϯΛ఻͑Δ
  4. 21.

    ຊՈ7*1&3 w  w PCKDJPʹدߘ w 50%0ΞϓϦ w $PSF%BUBΛ࢖ͬͯΔ w

    ܕ΍ม਺ͷ໋໊͕ΠϚΠν w ΞϓϦىಈ࣌ʹશը໘ͷґଘ ؔ܎Λղܾ
  5. 24.

    %*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Λॴ࣋͠ ΞΫγϣϯΛ఻͑Δ
  6. 25.

    %*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తͳղܾํ๏ͱ͍͏Θ͚Ͱ͸͋Γ·ͤΜ
  7. 29.

    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Λ࢖͍ͨ͘ͳΔཁٻͬͯɺܕʹቕΊΒΕ੍ͨ໿ͷ΋ͱͰ νʔϜͰϒϨͳ͘ϓϩάϥϛϯά͕͍ͨ͠Μ͡Όͳ͍ͷ͔ͳͱ
  8. 30.

    1SFTFOUFSΛςετ͍ͨ͠ͳΒ 5FTU%PVCMF 7JFX 5FTU%PVCMF 3PVUFS 1SFTFOUFS 5FTU%PVCMF *OUFSBDUPS &OUJUZ ςετ༻ͷσʔλ

    ΋͘͠͸ςετ༻ΤϥʔΛग़ྗ͢Δ ༻ҙͨ͠ςετσʔλΛηοτ͠ɺ ৗʹͦΕΛग़ྗ͢Δɻ 1SFTFOUFSͷΤϥʔϋϯυϦϯάΛ ςετ͚ͨ͠Ε͹ɺ ΤϥʔΛฦͤΔผͷ5FTU%PVCMF΋ ༻ҙ͢Δɻ 1SFTFOUFSͷग़ྗͱͯ͠7JFXͷEFMFHBUFϝιου͕ಈ࡞ɻ ͦͷϝιου͔Βظ଴஋ͱΛൺֱ͢Δ ظ଴஋ͱͷൺֱݕূՕॴ ςετίʔυ͔Βͷݺͼग़͠ 1SFTFOUFSͷग़ྗͱͯ͠3PVUFSʹσʔλ͕౉͞ΕΔ ͦͷϝιου͔Βظ଴஋ͱΛൺֱ͢Δ
  9. 32.

    ༨ஊ w ΫϦʔϯΞʔΩςΫνϟͰ΋ந৅Ͱ͸ͳ͘۩৅Λ࢖͍ͬͯ Δྫ͸͋Δʢ$"ຊୈষʣ w 4USJOH͸҆ఆͨ͠۩৅ͳͷͰґଘ͍͍ͯ͠ w 4USJOH͕ίϩίϩมΘΔ͜ͱ͸ؾʹ͠ͳ͍͍ͯ͘ w ґଘͨ͘͠ͳ͍ͷ͸มԽ͠΍͍͢۩৅ཁૉ

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