Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Usando RxSwift para construir UIs simplesmente testáveis

Usando RxSwift para construir UIs simplesmente testáveis

Um live-coding experimental que vai construir um view controller usando RxSwift, view models e um padrão arquitetural baseado em fronteiras em vez de camadas

Fellipe Caetano

November 04, 2017
Tweet

More Decks by Fellipe Caetano

Other Decks in Programming

Transcript

  1. Usando RxSwift para construir UIs simplesmente testáveis Um live-coding experimental

    que vai construir um view controller usando RxSwift, view models e um padrão arquitetural baseado em fronteiras em vez de camadas
  2. Como pegar os múltiplos de 3 que são pares e

    estão entre 1 e 10? let sequence = (1 ... 10) sequence .map({ $0 * 3 }) // Multiplica elementos por 3 .filter({ $0 % 2 == 0 }) // Remove elementos ímpares .forEach({ x in assert(x % 2 == 0) print(x) })
  3. E se os números entre 1 e 10 fossem emitidos

    de forma assíncrona... let sequence = /* sequência assíncrona de números entre 1 e 10 */ sequence .map({ $0 * 3 }) // Multiplica elementos por 3 .filter({ $0 % 2 == 0 }) // Remove elementos ímpares .subscribe(onNext: { x in assert(x % 2 == 0) print(x) })
  4. ...ao longo do tempo? let sequence = Observable<Int>.create { observer

    in for i in (1 ... 10) { DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(500)) { observer.onNext(i) } } // ... } sequence .map({ $0 * 3 }) // Multiplica elementos por 3 .filter({ $0 % 2 == 0 }) // Remove elementos ímpares .subscribe(onNext: { x in assert(x % 2 == 0) print(x) })
  5. Isto é RxSwift RxSwift são abstrações para eventos assíncronos ao

    longo tempo, permitindo que eles sejam manipulados como sequências usando operadores funcionais Estas sequências podem ser combinadas, transformadas e observadas usando funções puras* *funções que não causam efeitos colaterais e sempre retornam o mesmo valor para cada conjunto de parâmetros
  6. Isto é RxSwift RxSwift permite usar a mesma abstração para

    taps em botões, input de texto em formulários, respostas de APIs, atualizações de localização geográfica e praticamente tudo o que é assíncrono e baseado em eventos Todas estas tarefas viram sequências de valores, que são muito fáceis de testar
  7. Em resumo A abstração de eventos como sequências de valores

    emitidos e transformados de forma assíncrona ao longo do tempo permite usar TDD para escrever todo o comportamento da UI (validação de input e lógica de apresentação) A mesma abstração permite testar a aparência da nossa UI usando testes de snapshots sem usar mocks, pois permite que o código de UI lide apenas com valores que entram e valores que saem, sem depender de objetos de negócio
  8. Mais informações • App de exemplo https:/ /github.com/fellipecaetano/simply-testable-ui • Backend

    de teste https:/ /github.com/fellipecaetano/heimdall-api • Repositório oficial do RxSwift https:/ /github.com/ReactiveX/RxSwift • RxMarbles http:/ /rxmarbles.com • Boundaries, talk de Gary Bernhardt https:/ /www.destroyallsoftware.com/talks/boundaries
  9. Sobre mim • Sou desenvolvedor iOS sênior na Sympla e

    tenho pouco mais de 6 anos de experiência trabalhando com tecnologias Apple; • Nasci e fui criado e Campinas e antes da Sympla trabalhei na Movile e na Dextra, primariamente como desenvolvedor iOS mas também como desenvolvedor full- stack; • Sou entusiasta de desenvolvimento JavaScript e uso a evolução do ecossistema como ponto de partida para minhas pesquisas; • Minha especialidade é buscar soluções altamente testáveis e simples de evoluir para problemas de várias faixas de complexidade; • Você consegue me encontrar no Twitter, GitHub, LinkedIn e no Slack da comunidade brasileira do CocoaHeads ✌