$30 off During Our Annual Pro Sale. View Details »

Definiendo límites

Definiendo límites

Presentado en iOS Love en Diciembre, 2017

Francisco Díaz

December 14, 2017
Tweet

More Decks by Francisco Díaz

Other Decks in Programming

Transcript

  1. DEFINIENDO LIMITES

  2. Francisco Díaz franciscodiaz.cl

  3. None
  4. 3 desarrolladores iOS 28 horas 1 projecto

  5. EVA BC programs provide vital support to anti- violence programs

    and communities across BC. — Ending Violence Association ONG
  6. None
  7. Features: → Botón de pánico → Today widget → Knock

  8. Botón de pánico: Al presionar el botón → Reportar

  9. Today widget: Al presionar el botón → Reportar

  10. Knock Al golpear el teléfono → Reportar

  11. División de trabajo

  12. Por feature → 1 Dev: Pantalla con botón en iOS

    app → 1 Dev: Today widget → 1 Dev: Knock
  13. None
  14. None
  15. None
  16. ❌ Una persona por "feature" ✅ Una persona por "capa"

  17. None
  18. Dependencias

  19. Dependency inversion

  20. protocol ReportCreator { func createReport() throws -> Report }

  21. class SuccessReportCreator: ReportCreator { func createReport() throws -> Report {

    return Report(id: "1", date: Date()) } } class ErrorReportCreator: ReportCreator { func createReport() throws -> Report { throw ReportCreationError.fakeError } }
  22. 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 } } }
  23. class BigPanicButtonViewController: UIViewController { init(reportCreator: ReportCreator = SuccessReport()) { ...

    } }
  24. ¿Si el usuario no tiene internet?

  25. None
  26. None
  27. None
  28. None
  29. protocol APIRequester { func createReport() throws -> JSON } protocol

    SMSHandler { func sendSMS() throws -> SMS } protocol ConnectivityListener { var isConnected: Bool { get } }
  30. Nada existe aún, pero podemos probar si funciona

  31. Demo

  32. Recap → Movernos independientemente → Reducir conflictos → No hay

    necesidad de esperar para integrar código.
  33. ¿Preguntas?