Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Swift coding Strategy
Search
Takaaki Tanaka
April 17, 2017
Technology
0
1.5k
Swift coding Strategy
AKIBA.swift 1周年記念での発表スライドです
テックな内容は皆無です
https://classmethod.connpass.com/event/53603/
Takaaki Tanaka
April 17, 2017
Tweet
Share
More Decks by Takaaki Tanaka
See All by Takaaki Tanaka
Tellus の衛星データを見てみよう #mf_fukuoka
kongmingstrap
0
240
JAWS-UG 福岡 #16 re:Invent 現地に行った人のお話 #jawsugfuk #jawsug
kongmingstrap
0
340
AppMod の開発のイマを知るために現地に潜入した私が見たものは・・・? #GoogleCloudNext
kongmingstrap
0
450
Kong Gateway から読みとく、 API統合・API連携サービスの最新情報 #devio2023
kongmingstrap
0
1.1k
Cloud Run に憧れて Google Cloud を推進している話 / CX事業本部で使われている技術
kongmingstrap
0
140
AWS / Google Cloud / Azure それぞれの推しサービス.pdf
kongmingstrap
0
1.2k
CPUブーストの話
kongmingstrap
0
35
私のAWS愛を聞け! ~ここが好きだよStep Functions~ #devio2022
kongmingstrap
0
960
Cloud Run が作る世界 #devio2022
kongmingstrap
0
2.1k
Other Decks in Technology
See All in Technology
GraphQL 成熟度モデルの紹介と、プロダクトに当てはめた事例 / GraphQL maturity model
mh4gf
7
1.4k
2024春 注目のWeb系 OSS & SaaS 3選
makies
0
110
JSON攻略法.pdf
miyakemito
8
5.1k
ChatworkのSRE部って実は 半分くらいPlatform Engineering部かもしれない
saramune
0
160
BPStudyの200回を中心にIT業界を振り返る。そしてこれから
haru860
3
310
Java EE/Jakarta EEの現状と将来―クラウドネイティブ時代にJava EEは対応できるのか?―
takakiyo
1
170
今日からできる!簡単 .NET 高速化 Tips -2024 edition-
xin9le
6
2.5k
Google Cloud Next '24でブログを10本書いた方法と勉強会を沸かせた方法
yasumuusan
0
310
開発生産性大幅アップ!Postman VS Code拡張機能
nagix
3
500
障害対応をちょっとずつよくしていくための 演習の作りかた
heleeen
1
330
いつか使うかも貯金してたらめちゃめちゃ機能が増えてた話
riyaamemiya
0
450
「スニダン」開発組織の構造に込めた意図 ~組織作りはパッションや政治ではない!~
rinchsan
4
580
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
244
20k
What’s in a name? Adding method to the madness
productmarketing
PRO
16
2.6k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Being A Developer After 40
akosma
62
580k
How GitHub (no longer) Works
holman
304
140k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
Clear Off the Table
cherdarchuk
84
310k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
2
3.4k
The Cult of Friendly URLs
andyhume
74
5.7k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
357
22k
Producing Creativity
orderedlist
PRO
337
39k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
Transcript
2017/04/17 Swift coding Strategy AKIBA.swift Ұपه೦ษڧձ
About Me
• ాத ໌ (Takaaki Tanaka) • Ϋϥεϝιουגࣜձࣾ • ϞόΠϧόοΫΤϯυ •
@kongmingtrap • Swift / Objective-C / Scala / JavaScript … • GyazSquare / GitHub
˞ࣄͰ͢
None
ؓٳ
Strategy
Strategy Pattern
Strategy Pattern // MARK: - Interface public protocol TodoRepository {
func get(_ handler: @escaping (Result<[TodoEntity]>) -> Void) } // MARK: - Implementation final class TodoRepositoryImpl: TodoRepository { private let dataStore: TodoDataStore public init(dataStore: TodoDataStore) { self.dataStore = dataStore } func get(_ handler: @escaping (Result<[TodoEntity]>) -> Void) { dataStore.get(with: ["filter": "all"]).onSuccess { entities in let result = Result<[TodoEntity]>.success(entities) handler(result) }.onFailure { error in let result = Result<[TodoEntity]>.failure(error) handler(result) } } }
Strategy Pattern typealias TodoListComplitionHandler = ([TodoModel]?) -> Void // MARK:
- Interface protocol TodoListUseCase { func fetchTodos(_ complite: TodoListComplitionHandler?) } // MARK: - Implementation struct TodoListUseCaseImpl: TodoListUseCase { private let todoRepository: TodoRepository public init(todoRepository: TodoRepository) { self.todoRepository = todoRepository } public func fetchTodos(_ compliton: TodoListComplitionHandler?) { todoRepository.get { result in switch result { case .success(let value): let todoModels = try! TodoTranslator().translate(value) compliton?(todoModels) case .failure(let error): print(error) compliton?(nil) } } } }
Strategy Pattern 4USBUFHZ1BUUFSOΞϧΰϦζϜͷηοτΛఆ ٛ͢Δํ๏Λఏڙ͠ɺ͜ΕΒΛަՄೳʹ͢Δ ͜ͱΛతͱ͍ͯ͠Δɻ4USBUFHZ1BUUFSOΑΓɺ ΞϧΰϦζϜΛ༻ऀ͔Βಠཱͨ͠··༷ʑʹ มԽͤ͞Δ͜ͱ͕Ͱ͖ΔΑ͏ʹͳΔɻ
Strategy Pattern 4USBUFHZ1BUUFSOΞϧΰϦζϜͷηοτΛఆ ٛ͢Δํ๏Λఏڙ͠ɺ͜ΕΒΛަՄೳʹ͢Δ ͜ͱΛతͱ͍ͯ͠Δɻ4USBUFHZ1BUUFSOΑΓɺ ΞϧΰϦζϜΛ༻ऀ͔Βಠཱͨ͠··༷ʑʹ มԽͤ͞Δ͜ͱ͕Ͱ͖ΔΑ͏ʹͳΔɻ
Strategy of AKIBA.swift
Strategy ઓུʢͤΜΓΌ͘ɺӳ4USBUFHZʣɺҰൠతʹಛఆͷඪ Λୡ͢ΔͨΊʹɺظతࢹͱෳ߹ࢥߟͰྗࢿݯΛ૯߹త ʹӡ༻͢Δٕज़ɾՊֶͰ͋Δɻ
Strategy IUUQXXXJUNFEJBDPKQCJ[JEBSUJDMFT OFXTIUNM
Strategy w όουϊϋͳͲɺΫϥεϝιου͚ͩͰ ڞ༗Ͱ͖ͳ͍ใΛΛ௨ͯ͡ڞ༗Ͱ͖ΔΑ ͏ʹ͢Δ w ༗໊ਓͷํͱͭͳ͕ͬͯɺࠔͬͨͱ͖ʹฉ͚ ΔΑ͏ʹ͢Δ w Ϋϥεϝιου͔ΒελʔϓϨΠϠʔΛഐग़
͢Δ
Tactics w ִ݄ͰษڧձΛ։࠵͢Δ w ։࠵ϒϩάΛॻ͘ w ήετεϐʔΧʔΛট͘ w ॴΛఏڙ͢Δ w
ຖճςʔϚʹԊͬͯืूΛ͔͚Δ
USZ4XJGUৼΓฦΓษڧձ Ր 4XJGUͱ0CKFDUJWF$ͱͷจ๏ൺֱ Ր
88%$ใڞ༗ձ ۚ 4XJGU-5େձʂ Ր εϖγϟϧίϥϘʂʂ ݄ ϑϦʔτʔʔΫʂʂ Ր GBTUMBOFϋϯζΦϯ Ր ϑϦʔτʔʔΫʂʂ Ր લʹࠂ͢ΔษڧձɺͦΕ͕",*#"TXJGU Ր ϑϦʔτʔʔΫʂʂ Ր ,ZPCBTIJTXJGUY",*#"TXJGU߹ಉษڧձ ਫ ",*#"TXJGUº4XJGUѪձWPM ݄ ",*#"TXJGUҰपه೦ษڧձʂ ݄ ։࠵ཤྺ
USZ4XJGUৼΓฦΓษڧձ Ր 4XJGUͱ0CKFDUJWF$ͱͷจ๏ൺֱ Ր
88%$ใڞ༗ձ ۚ 4XJGU-5େձʂ Ր εϖγϟϧίϥϘʂʂ ݄ ϑϦʔτʔʔΫʂʂ Ր GBTUMBOFϋϯζΦϯ Ր ϑϦʔτʔʔΫʂʂ Ր લʹࠂ͢ΔษڧձɺͦΕ͕",*#"TXJGU Ր ϑϦʔτʔʔΫʂʂ Ր ,ZPCBTIJTXJGUY",*#"TXJGU߹ಉษڧձ ਫ ",*#"TXJGUº4XJGUѪձWPM ݄ ",*#"TXJGUҰपه೦ษڧձʂ ݄ ։࠵ཤྺ
USZ4XJGUৼΓฦΓษڧձ Ր 4XJGUͱ0CKFDUJWF$ͱͷจ๏ൺֱ Ր
88%$ใڞ༗ձ ۚ 4XJGU-5େձʂ Ր εϖγϟϧίϥϘʂʂ ݄ ϑϦʔτʔʔΫʂʂ Ր GBTUMBOFϋϯζΦϯ Ր ϑϦʔτʔʔΫʂʂ Ր લʹࠂ͢ΔษڧձɺͦΕ͕",*#"TXJGU Ր ϑϦʔτʔʔΫʂʂ Ր ,ZPCBTIJTXJGUY",*#"TXJGU߹ಉษڧձ ਫ ",*#"TXJGUº4XJGUѪձWPM ݄ ",*#"TXJGUҰपه೦ษڧձʂ ݄ ςʔϚ͕ܾ·Βͳ͔ͬͨճ
USZ4XJGUৼΓฦΓษڧձ Ր 4XJGUͱ0CKFDUJWF$ͱͷจ๏ൺֱ Ր
88%$ใڞ༗ձ ۚ 4XJGU-5େձʂ Ր εϖγϟϧίϥϘʂʂ ݄ ϑϦʔτʔʔΫʂʂ Ր GBTUMBOFϋϯζΦϯ Ր ϑϦʔτʔʔΫʂʂ Ր લʹࠂ͢ΔษڧձɺͦΕ͕",*#"TXJGU Ր ϑϦʔτʔʔΫʂʂ Ր ,ZPCBTIJTXJGUY",*#"TXJGU߹ಉษڧձ ਫ ",*#"TXJGUº4XJGUѪձWPM ݄ ",*#"TXJGUҰपه೦ษڧձʂ ݄ ϗʔϜͰ։࠵͠ͳ͔ͬͨճɹ#AKIBA #ͱ
USZ4XJGUৼΓฦΓษڧձ Ր 4XJGUͱ0CKFDUJWF$ͱͷจ๏ൺֱ Ր
88%$ใڞ༗ձ ۚ 4XJGU-5େձʂ Ր εϖγϟϧίϥϘʂʂ ݄ ϑϦʔτʔʔΫʂʂ Ր GBTUMBOFϋϯζΦϯ Ր ϑϦʔτʔʔΫʂʂ Ր લʹࠂ͢ΔษڧձɺͦΕ͕",*#"TXJGU Ր ϑϦʔτʔʔΫʂʂ Ր ,ZPCBTIJTXJGUY",*#"TXJGU߹ಉษڧձ ਫ ",*#"TXJGUº4XJGUѪձWPM ݄ ",*#"TXJGUҰपه೦ษڧձʂ ݄ ͦͦษڧձ͡Όແ͍
Tactics w ִ݄ͰษڧձΛ։࠵͢Δ w ։࠵ϒϩάΛॻ͘ w ήετεϐʔΧʔΛট͘ w ॴΛఏڙ͢Δ w
ຖճςʔϚʹԊͬͯืूΛ͔͚Δ
ͦΕඞউͷज़ɺ ߹มͷܗػʹ͋Γɻ
w ઓུΑΓઓज़ w ༏लͳޙํࢧԉʹΑͬͯࢧ͑ΒΕ͖ͯ ·ͨ͠ w ϒϩάඞͣ࣍ͷ·Ͱʹॻ͘ Recap
ΑΖ͓͘͠Ͷ͕͍͠·͢
0OFNPSFUIJOHʜ
IUUQEFWDMBTTNFUIPEKQOFXTNPCJMFUFBNJOPTBLBWPM
w ݄ w #6,630TXJGUY",*#"TXJGU w DPNJOHTPPOʜ
͓ΘΓ