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
Definiendo límites
Search
Francisco Díaz
December 14, 2017
Programming
1
60
Definiendo límites
Presentado en iOS Love en Diciembre, 2017
Francisco Díaz
December 14, 2017
Tweet
Share
More Decks by Francisco Díaz
See All by Francisco Díaz
Working effectively at scale
fdiaz
4
250
I hate public speaking. So why do I keep doing it?
fdiaz
0
79
Si odio hablar en público. ¿Por qué lo sigo haciendo?
fdiaz
2
92
Move fast and keep your code quality
fdiaz
1
310
De qué hablo cuando hablo de trabajo remoto
fdiaz
1
100
Setting Boundaries
fdiaz
1
81
Swift Values
fdiaz
0
64
Sisifo o Cómo empezar de nuevo - y otra vez.
fdiaz
0
69
Other Decks in Programming
See All in Programming
Namespace on read
tagomoris
2
370
開発部に不満を持っていたCSがエンジニアにジョブチェンしてわかった「勝手に諦めない」ことの大切さ
sakuraikotone
28
16k
CSC307 Lecture 11
javiergs
PRO
0
240
Architectures with Lightweight Stores: New Rules and Options
manfredsteyer
PRO
0
100
はしめてのプログラミングとロボット制御
watawatavoltage
0
290
日付と正規化
megmogmog1965
0
140
AHC035解説
terryu16
0
710
さきがけから振り返るアーキテクチャ刷新 / Reflecting on the Architectural Renewal from the Vanguard
nrslib
2
770
OpenAI/Gemini APIを使って EPUBを翻訳するCLIツールをつくってみた
tomiyan
0
790
Introduction of Happy Eyeballs Version 2 (RFC8305) to the Socket library
coe401_
1
220
Advanced App Shrinking Techniques
cbeyls
2
150
feature環境をGitHub ActionsとCloudFormationでいい感じに管理する
nealle
2
310
Featured
See All Featured
Thoughts on Productivity
jonyablonski
64
4.1k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
12
3.8k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
44
4.7k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
662
120k
Clear Off the Table
cherdarchuk
89
320k
Code Review Best Practice
trishagee
58
16k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
105
6.8k
It's Worth the Effort
3n
181
27k
YesSQL, Process and Tooling at Scale
rocio
166
14k
VelocityConf: Rendering Performance Case Studies
addyosmani
321
23k
Practical Orchestrator
shlominoach
185
10k
Ruby is Unlike a Banana
tanoku
96
10k
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?