$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

    View Slide

  2. Francisco Díaz
    franciscodiaz.cl

    View Slide

  3. View Slide

  4. 3
    desarrolladores iOS
    28
    horas
    1
    projecto

    View Slide

  5. EVA BC programs provide
    vital support to anti-
    violence programs and
    communities across BC.
    — Ending Violence Association ONG

    View Slide

  6. View Slide

  7. Features:
    → Botón de pánico
    → Today widget
    → Knock

    View Slide

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

    View Slide

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

    View Slide

  10. Knock
    Al golpear el teléfono → Reportar

    View Slide

  11. División de
    trabajo

    View Slide

  12. Por feature
    → 1 Dev: Pantalla con botón en iOS app
    → 1 Dev: Today widget
    → 1 Dev: Knock

    View Slide

  13. View Slide

  14. View Slide

  15. View Slide


  16. Una persona por "feature"

    Una persona por "capa"

    View Slide

  17. View Slide

  18. Dependencias

    View Slide

  19. Dependency inversion

    View Slide

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

    View Slide

  21. class SuccessReportCreator: ReportCreator {
    func createReport() throws -> Report {
    return Report(id: "1", date: Date())
    }
    }
    class ErrorReportCreator: ReportCreator {
    func createReport() throws -> Report {
    throw ReportCreationError.fakeError
    }
    }

    View Slide

  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
    }
    }
    }

    View Slide

  23. class BigPanicButtonViewController: UIViewController {
    init(reportCreator: ReportCreator = SuccessReport()) {
    ...
    }
    }

    View Slide

  24. ¿Si el usuario
    no tiene
    internet?

    View Slide

  25. View Slide

  26. View Slide

  27. View Slide

  28. View Slide

  29. protocol APIRequester {
    func createReport() throws -> JSON
    }
    protocol SMSHandler {
    func sendSMS() throws -> SMS
    }
    protocol ConnectivityListener {
    var isConnected: Bool { get }
    }

    View Slide

  30. Nada existe aún,
    pero podemos probar si
    funciona

    View Slide

  31. Demo

    View Slide

  32. Recap
    → Movernos independientemente
    → Reducir conflictos
    → No hay necesidad de esperar para integrar
    código.

    View Slide

  33. ¿Preguntas?

    View Slide