Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Definiendo límites
Search
Francisco Díaz
December 14, 2017
Programming
170
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Definiendo límites
Presentado en iOS Love en Diciembre, 2017
Francisco Díaz
December 14, 2017
More Decks by Francisco Díaz
See All by Francisco Díaz
Inteligencia Artificial en PedidosYa - Una mirada pragmática
fdiaz
0
67
Working effectively at scale
fdiaz
4
340
I hate public speaking. So why do I keep doing it?
fdiaz
0
190
Si odio hablar en público. ¿Por qué lo sigo haciendo?
fdiaz
2
200
Move fast and keep your code quality
fdiaz
1
450
De qué hablo cuando hablo de trabajo remoto
fdiaz
1
190
Setting Boundaries
fdiaz
1
220
Swift Values
fdiaz
0
190
Sisifo o Cómo empezar de nuevo - y otra vez.
fdiaz
0
180
Other Decks in Programming
See All in Programming
npm との違いを手がかりにGo の依存管理を理解したい
optim
0
1k
自作Discord音声botをLambda MicroVMsに移行した話 / Migrating My Discord Voice Bot to Lambda MicroVMs
akihisaikeda
0
140
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
1.1k
sbt 2.0: takeoff
eed3si9n
0
170
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
200
contenteditable と日本語入力に向き合う
colorful12
0
210
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
170
AIに “答え“を書かせるのを やめてみた
___akari11
0
130
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
Simple Storage Service(S3) is not simple
iwatsukayura
0
310
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
370
Jetpack Compose Mechanisms
skydoves
3
840
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
331
22k
Rails Girls Zürich Keynote
gr2m
96
14k
Amusing Abliteration
ianozsvald
1
350
Visualization
eitanlees
153
17k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
460
Product Roadmaps are Hard
iamctodd
55
13k
Thoughts on Productivity
jonyablonski
76
5.4k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
270
Building an army of robots
kneath
307
47k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
WENDY [Excerpt]
tessaabrams
14
40k
Crafting Experiences
bethany
1
390
Transcript
DEFINIENDO LIMITES
Francisco Díaz franciscodiaz.cl
None
3 desarrolladores iOS 28 horas 1 projecto
EVA BC programs provide vital support to anti- violence programs
and communities across BC. — Ending Violence Association ONG
None
Features: → Botón de pánico → Today widget → Knock
Botón de pánico: Al presionar el botón → Reportar
Today widget: Al presionar el botón → Reportar
Knock Al golpear el teléfono → Reportar
División de trabajo
Por feature → 1 Dev: Pantalla con botón en iOS
app → 1 Dev: Today widget → 1 Dev: Knock
None
None
None
❌ Una persona por "feature" ✅ Una persona por "capa"
None
Dependencias
Dependency inversion
protocol ReportCreator { func createReport() throws -> Report }
class SuccessReportCreator: ReportCreator { func createReport() throws -> Report {
return Report(id: "1", date: Date()) } } class ErrorReportCreator: ReportCreator { func createReport() throws -> Report { throw ReportCreationError.fakeError } }
class BigPanicButtonViewController: UIViewController { private let reportCreator: ReportCreator init(reportCreator: ReportCreator)
{ self.reportCreator = reportCreator } func didTapBigPanicButton() { do { // Handle Report let report = try reportCreator.createReport() } catch { // Handle error } } }
class BigPanicButtonViewController: UIViewController { init(reportCreator: ReportCreator = SuccessReport()) { ...
} }
¿Si el usuario no tiene internet?
None
None
None
None
protocol APIRequester { func createReport() throws -> JSON } protocol
SMSHandler { func sendSMS() throws -> SMS } protocol ConnectivityListener { var isConnected: Bool { get } }
Nada existe aún, pero podemos probar si funciona
Demo
Recap → Movernos independientemente → Reducir conflictos → No hay
necesidad de esperar para integrar código.
¿Preguntas?