Definiendo límites

Definiendo límites

Presentado en iOS Love en Diciembre, 2017

675a0b0e911ee6c1c270a8d86a44e716?s=128

Francisco Díaz

December 14, 2017
Tweet

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?