2018/6/29 Fri. "みてねのMeetup#1" で発表したスライドです。 iOS版の開発について順をおって説明しました。
iOS൛ͷ։ൃखॱॻ@_atsushisakaiΈͯͶͷMeetup #1
View Slide
ࣗݾհञҪ ಞ @_atsushisakai• 201111݄ ϛΫγΟೖࣾ• 2012ʙ2014 SNS mixiʹؔ࿈ͨ͠ECܥͷ৽نࣄۀΛෳ։ൃ• 2014ʙ ΈͯͶۀ࣌ʹiOSΤϯδχΞͱͯ͠ࢀՃ• 20174݄ʙ ΈͯͶࣄۀ෦ ։ൃάϧʔϓϚωʔδϟ• 20181݄ʙ SREνʔϜॴଐɺΠϯϑϥઐ೦ɺߴԽɾෛՙࢄ
͢͜ͱ• iOS൛ΈͯͶɺԿΛߟ͑ͯઃܭ͞ΕɺͲͷΑ͏ʹ։ൃΛߦ͍ͬͯΔ͔• ΞʔΩςΫνϟࣗମͷͰͳ͘ɺ͋ΔΞʔΩςΫνϟͷ্Ͱ࣮ࡍʹͲ͏։ൃ͍ͯ͠Δ͔• Kyashͷ@konifar͞ΜʹӨڹΛड͚ͨൃද• https://drive.google.com/file/d/1rlL1AdE5R_M1UAxVW_lY4orFTIEBfFJY/view
iOS൛ΈͯͶͷࣦഊ• ίʔυ্ͷࣦഊ• MVC ( or MVP)• FatViewController• ඈͼަ͏NSNotification• ґଘ͕ؔແͳSingletonͷେྔൃੜ• ωετ͠·͘ΔObjective-C block, Swift Closure• ͱΓ͋͑ͣManager• ແҙຯʹੜ͑ΔExtension• વͷΑ͏ʹଘࡏ͠ͳ͍ςετίʔυɹ…
iOS൛ΈͯͶͷࣦഊ• ίʔυ͕ϏδωεʹѱӨڹΛͨΒ͢• ଐਓԽ• ϞνϕʔγϣϯԼ• ݟੵΓਫ਼ͷԼ• CSελοϑʹ͠Θدͤ
ΞʔΩςΫνϟ৽• 20181݄͝Ζʹ࣮ࢪ• ଟਓ։ൃʹ͑͏Δͷʹ͍ͨ͠• ςετΛॻ͘ʢॻ͚ΔΑ͏ʹ͢Δʣ• ॻ͘ՕॴΛ໌֬ʹنఆ͢Δʢॻ͔ͳ͍͍ͯ͘ͱ͜Ζॻ͔ͳ͍ʣ• ԿΛ࡞Δ͔ɺࣄલʹѲՄೳ• ॳΊͯͷਓͰා͘ͳ͍
λʔχϯάϙΠϯτ• bufferapp/android-clean-architecture-boilerplate• KotlinͰClean ArchitectureΛ࣮ͨ͠AndroidΞϓϦͷαϯϓϧίʔυ• ͦͷ··ͦͬ͘ΓiOS/Swiftʹస༻Ͱ͖Δ• ࣗͷΞϓϦͰ͍ͬͯ͘ؾ͕࣋ͪߴ·ͬͨ
େํ• MVP• PresenterͷςετΛॻ͖ViewControllerΛബ͘͢Δ• CleanArchitecture• ModelϨΠϠʔΛཧ͠ɺڊେͳPresenterManagerʹ͠ͳ͍• RxSwiftΛઃܭʹऔΓೖΕͯඇಉظॲཧͷՄಡੑΛߴΊΔ• ςετΛॻ͘
UI Presentation DomainPresenterViewViewControllerPresenterImpl UseCaseMapperModelҹґଘؔ
Domain Data RemoteUseCaseMapperModelҹґଘؔRepository RepositoryImplMapperModelCacheDataSourceDataSourceImplEntityDataSourceImplEntity
ͦΕͰ։ൃ͍͖ͯ͠·͢
1: ͋͘·ͰαϯϓϧίʔυͰ͢
2: શମతʹ͔ͳΓলུ͍ͯ͠·͢
Ҋ݅հ
• ۙگ (Recents) ը໘• ϢʔβʔͷΞΫςΟϏςΟΛྲྀ͢ϑΟʔυUI• API͔ΒϑΟʔυͷListΛऔಘ• આ໌Λ؆қతʹ͢ΔͨΊCache͠ͳ͍• APIೲ͕Ε͍ͯΔʂʢઃఆʣ
Domain• UseCase͔ΒऔΓग़ͨ͠Βग़ͯ͘ΔΦϒδΣΫτ• ϑΟʔυͷͻͱͭʹ૬͢Δ
Domain• UseCase͕ґଘ͢ΔRepositoryͷΠϯλʔϑΣʔε• SingleΦϒδΣΫτͱͯ͠ඇಉظʹΦϒδΣΫτΛฦ͢
Domain
DomainRepositoryͷΠϯλʔϑΣʔεʹґଘͤ͞ΔRepository͔ΒσʔλΛऔΓग़͢
ࢀߟ (kotlin)• ϕʔεΫϥε SingleUseCase.kt• https://github.com/bufferapp/android-clean-architecture-boilerplate/blob/master/domain/src/main/java/org/buffer/android/boilerplate/domain/interactor/SingleUseCase.kt
ςετΛॻ͍ͯ͜͜ͰPull Request
Presentation• நԽ͞ΕͨViewͷProtocolΛఆٛ• Presenter͜ͷViewʹରͯ͠දࣔΛࢦࣔ͢ΔΑ͏ʹॻ͘
Presentation• Presenterʹ࣮͖͢ProtocolΛఆٛɻ• ViewControllerϥΠϑαΠΫϧ্ͰPresenterͷ֤ॲཧΛ࣮ߦ͢Δ
Presentation
PresentationViewΛऑࢀর݁ՌΛViewʹө͢Δ
User Interface
User InterfacePresenterʹॲཧ͕ॻ͍ͯ͋ΔRecentViewΛConform
͜ͷ࣌ͰLayoutͯ͠σʔλΛදࣔͤ͞Δ
ςετॻ͔ͳ͍ͰOKɺPull Request
APIͰ͖ͨʁ
Data
DataDataϨΠϠʔͰѻ͏ΦϒδΣΫτ
DataDataϨΠϠʔͰѻ͏ΦϒδΣΫτ͔ΒDomainϨΠϠʔͰѻ͏ΦϒδΣΫτʹTranslate͢Δ
Remote
ͦΖͦΖ࣌ؒͳ͍ͷͰAPIClientͷ۩ମతͳ࣮লུ͠·͢
αʔόʔͱ݁߹ͯ͠ಈ࡞֬ೝʂ
࣮खॱͷ·ͱΊ• ґଘ͕ؔཧ͞Ε͍ͯΔͷͰॱংཱ࣮͍ͯͯ͢͠• API/Cache͕ͳͯ͘UseCase͕ฦ͢ϞσϧΛͰͬͪ͋͛Ε͙͢ʹ࣮͍͚ͬͯΔ• ϨΠϠʔΛ͑Δͱ͖جຊతʹProtocolґଘ͢Δ• ςετॻ͘ͱ͜Ζͱॻ͔ͳ͍ͱ͜ΖͷϝϦϋϦΛ͚ͭΔ
͞Ε͍ͯΔ՝• Clean ArchitectureΛͲ͜·Ͱݫີʹ͍͔ͬͯ͘• ϑΝΠϧ͕ଟ࣮͕ͯ͘େม• ίʔυςϯϓϨʔτͳͲΛۦͯ͠ؾָʹ͍͖͍ͯͨ͠• ґଘؔղܾ͕͍͍ͪͪෳࡶ• SwinjectͳͲDI Containerͷಋೖ͕ඞવతʹͳ͖ͬͯͨ• Embedded FrameworkԽ͍ͯ͠ͳ͍• ґଘؔͷϧʔϧΛ؆୯ʹഁͬͯ͠·͏͜ͱ͕Ͱ͖Δ• ۃʹݴ͏ͱ Presenter͕APIΫϥΠΞϯτΛؾܰʹୟ͘͜ͱՄೳͱ͍͑Մೳ
ΞʔΩςΫνϟ৽ͷޮՌ• ͱΓ͋͑ͣίʔυΛॻ͘ͷ͕ਏ͘ͳָ͍ͯ͘͠• ςετΛॻ͘͜ͱ͕વͷۭؾʹͳΓίʔυϨϏϡʔָνϯ• ා͘ͳ͍• ΛݟੵΔ͜ͱ͕Ͱ͖Δ• ࣮QA࣌ͷόάͷͳͲ͜Ε͔Β͏গ͠ੳ͍͖͍ͯͨ͠
͋Γ͕ͱ͏͍͟͝·ͨ͠