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.7k
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
Zenn のウラガワ ~エンジニアのアウトプットを支える環境で Google Cloud が採用されているワケ~ #burikaigi #burikaigi_h
kongmingstrap
22
8.2k
AWS re:Invent 2024 ふりかえり
kongmingstrap
0
280
製造の課題に立ち向かう Manufacturing Data Engine と Manufacturing Connect の ご紹介
kongmingstrap
0
990
Tellus の衛星データを見てみよう #mf_fukuoka
kongmingstrap
0
770
JAWS-UG 福岡 #16 re:Invent 現地に行った人のお話 #jawsugfuk #jawsug
kongmingstrap
0
620
AppMod の開発のイマを知るために現地に潜入した私が見たものは・・・? #GoogleCloudNext
kongmingstrap
0
670
Kong Gateway から読みとく、 API統合・API連携サービスの最新情報 #devio2023
kongmingstrap
0
1.9k
Cloud Run に憧れて Google Cloud を推進している話 / CX事業本部で使われている技術
kongmingstrap
0
300
AWS / Google Cloud / Azure それぞれの推しサービス.pdf
kongmingstrap
1
1.5k
Other Decks in Technology
See All in Technology
250905 大吉祥寺.pm 2025 前夜祭 「プログラミングに出会って20年、『今』が1番楽しい」
msykd
PRO
1
240
JavaScript 研修
recruitengineers
PRO
6
1.4k
なぜスクラムはこうなったのか?歴史が教えてくれたこと/Shall we explore the roots of Scrum
sanogemaru
0
330
退屈なことはDevinにやらせよう〜〜Devin APIを使ったVisual Regression Testの自動追加〜
kawamataryo
4
1.1k
実践AIガバナンス
asei
3
300
【 LLMエンジニアがヒューマノイド開発に挑んでみた 】 - 第104回 Machine Learning 15minutes! Hybrid
soneo1127
0
250
Grafana Meetup Japan Vol. 6
kaedemalu
1
200
2025年になってもまだMySQLが好き
yoku0825
8
3.3k
Snowflakeの生成AI機能を活用したデータ分析アプリの作成 〜Cortex AnalystとCortex Searchの活用とStreamlitアプリでの利用〜
nayuts
0
150
シークレット管理だけじゃない!HashiCorp Vault でデータ暗号化をしよう / Beyond Secret Management! Let's Encrypt Data with HashiCorp Vault
nnstt1
3
130
衝突して強くなる! BLUE GIANTと アジャイルチームの共通点とは ― いきいきと活気に満ちたグルーヴあるチームを作るコツ ― / BLUE GIANT and Agile Teams
naitosatoshi
0
290
Grafana MCPサーバーによるAIエージェント経由でのGrafanaダッシュボード動的生成
hamadakoji
1
1.1k
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1370
200k
KATA
mclloyd
32
14k
Art, The Web, and Tiny UX
lynnandtonic
302
21k
Being A Developer After 40
akosma
90
590k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
The World Runs on Bad Software
bkeepers
PRO
70
11k
Side Projects
sachag
455
43k
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
Speed Design
sergeychernyshev
32
1.1k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
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ʜ
͓ΘΓ