SlideShare uma empresa Scribd logo
1 de 11
Baixar para ler offline
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
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)
})
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)
})
...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)
})
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
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
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
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
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 ✌
Obrigado! !

Mais conteúdo relacionado

Semelhante a Usando RxSwift para construir UIs simplesmente testáveis

Pilares do desenvolvimento Mobile no Nubank
 Pilares do desenvolvimento Mobile no Nubank Pilares do desenvolvimento Mobile no Nubank
Pilares do desenvolvimento Mobile no NubankDevCamp Campinas
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
Android Dev Conference 2017 - Arquitetura para projetos Android
 Android Dev Conference 2017 - Arquitetura para projetos Android Android Dev Conference 2017 - Arquitetura para projetos Android
Android Dev Conference 2017 - Arquitetura para projetos AndroidiMasters
 
Tornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSTornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSMatheus Donizete
 
Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]Felipe Pimentel
 
Construa painéis administrativos em Adobe Flex integrados com ASP.NET MVC
Construa painéis administrativos em Adobe Flex  integrados com ASP.NET MVCConstrua painéis administrativos em Adobe Flex  integrados com ASP.NET MVC
Construa painéis administrativos em Adobe Flex integrados com ASP.NET MVCIgor Musardo
 
Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoronaldoferraz
 
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?Desenvolvimento Mobile com Visual Studio 2008, por onde começar?
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?Stefanini
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)Armando Daniel
 
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009Ramon Durães
 
Angular >= 2 - One Framework Mobile & Desktop
Angular >= 2 - One Framework Mobile & DesktopAngular >= 2 - One Framework Mobile & Desktop
Angular >= 2 - One Framework Mobile & DesktopGDGFoz
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a TestesGregorio Melo
 
Projetos reativos com Angular, RxJS e Redux (ngRx)
Projetos reativos com Angular, RxJS e Redux (ngRx)Projetos reativos com Angular, RxJS e Redux (ngRx)
Projetos reativos com Angular, RxJS e Redux (ngRx)Loiane Groner
 
RxJava - Programação assíncrona para Android.
RxJava - Programação assíncrona para Android.RxJava - Programação assíncrona para Android.
RxJava - Programação assíncrona para Android.Clerton Leal
 

Semelhante a Usando RxSwift para construir UIs simplesmente testáveis (20)

Pilares do desenvolvimento Mobile no Nubank
 Pilares do desenvolvimento Mobile no Nubank Pilares do desenvolvimento Mobile no Nubank
Pilares do desenvolvimento Mobile no Nubank
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
jQuery e ASP.Net mvc2
jQuery e ASP.Net mvc2jQuery e ASP.Net mvc2
jQuery e ASP.Net mvc2
 
Android Dev Conference 2017 - Arquitetura para projetos Android
 Android Dev Conference 2017 - Arquitetura para projetos Android Android Dev Conference 2017 - Arquitetura para projetos Android
Android Dev Conference 2017 - Arquitetura para projetos Android
 
Tornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSTornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JS
 
Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]
 
Construa painéis administrativos em Adobe Flex integrados com ASP.NET MVC
Construa painéis administrativos em Adobe Flex  integrados com ASP.NET MVCConstrua painéis administrativos em Adobe Flex  integrados com ASP.NET MVC
Construa painéis administrativos em Adobe Flex integrados com ASP.NET MVC
 
Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programação
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
 
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?Desenvolvimento Mobile com Visual Studio 2008, por onde começar?
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)
 
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
 
Angular >= 2 - One Framework Mobile & Desktop
Angular >= 2 - One Framework Mobile & DesktopAngular >= 2 - One Framework Mobile & Desktop
Angular >= 2 - One Framework Mobile & Desktop
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Projetos reativos com Angular, RxJS e Redux (ngRx)
Projetos reativos com Angular, RxJS e Redux (ngRx)Projetos reativos com Angular, RxJS e Redux (ngRx)
Projetos reativos com Angular, RxJS e Redux (ngRx)
 
RxJava - Programação assíncrona para Android.
RxJava - Programação assíncrona para Android.RxJava - Programação assíncrona para Android.
RxJava - Programação assíncrona para Android.
 
ApresentaçãO Mvc
ApresentaçãO MvcApresentaçãO Mvc
ApresentaçãO Mvc
 
Apresentação M V C
Apresentação M V CApresentação M V C
Apresentação M V C
 
Mock Objects
Mock ObjectsMock Objects
Mock Objects
 

Usando RxSwift para construir UIs simplesmente testáveis

  • 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.
  • 8. 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
  • 9. 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
  • 10. 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 ✌