SlideShare uma empresa Scribd logo
1 de 81
Arquitetura Elmish com
Xamarin.Forms
O que é Elmish?
“Uma linguagem agradável para webapps
confiáveis.”
Gere JavaScript com ótimo desempenho e
sem exceções de tempo de execução.
Arquitetura
• Serviu de inspiração para o Redux
Como funciona?
Como funciona?
• Model / State
Como funciona?
• Model / State
• Message / Action
Como funciona?
• Model / State
• Message / Action
• Update / Reducer
Como funciona?
• Model / State
• Message / Action
• Update / Reducer
• View
Model View Update
Por que?
A Model é imutável,
o update é sempre
chamado de forma
síncrona, sem
problemas com
threads
Sua model se torna
a fonte única do
estado da sua
aplicação – Nunca
mais controlar
estado em múltiplas
camadas
Tendo uma UI virtual
por baixo dos panos
permite que você
consiga realizar
testes unitários em
tudo – Model, View,
Update
Funções de View
podem rodar fora da
thread de UI se
necessário
Por que?
A Model é imutável,
o update é sempre
chamado de forma
síncrona, sem
problemas com
threads
Sua model se torna
a fonte única do
estado da sua
aplicação – Nunca
mais controlar
estado em múltiplas
camadas
Tendo uma UI virtual
por baixo dos panos
permite que você
consiga realizar
testes unitários em
tudo – Model, View,
Update
Funções de View
podem rodar fora da
thread de UI se
necessário
Por que?
A Model é imutável,
o update é sempre
chamado de forma
síncrona, sem
problemas com
threads
Sua model se torna
a fonte única do
estado da sua
aplicação – Nunca
mais controlar
estado em múltiplas
camadas
Tendo uma UI virtual
por baixo dos panos
permite que você
consiga realizar
testes unitários em
tudo – Model, View,
Update
Funções de View
podem rodar fora da
thread de UI se
necessário
Por que?
A Model é imutável,
o update é sempre
chamado de forma
síncrona, sem
problemas com
threads
Sua model se torna
a fonte única do
estado da sua
aplicação – Nunca
mais controlar
estado em múltiplas
camadas
Tendo uma UI virtual
por baixo dos panos
permite que você
consiga realizar
testes unitários em
tudo – Model, View,
Update
Funções de View
podem rodar fora da
thread de UI se
necessário
Por que?
A Model é imutável,
o update é sempre
chamado de forma
síncrona, sem
problemas com
threads
Sua model se torna
a fonte única do
estado da sua
aplicação – Nunca
mais controlar
estado em múltiplas
camadas
Tendo uma UI virtual
por baixo dos panos
permite que você
consiga realizar
testes unitários em
tudo – Model, View,
Update
Funções de View
podem rodar fora da
thread de UI se
necessário
Elm também é uma linguagem
Elm também é uma linguagem
Funcional
Elm também é uma linguagem
Funcional
Imutabilidade Funções puras
F#
Sobre
• Desenvolvido pela Microsoft Research
– Incluído junto com Visual Studio in 2010
Sobre
• Desenvolvido pela Microsoft Research
– Incluído junto com Visual Studio in 2010
• Open source
– GitHub
Sobre
• Desenvolvido pela Microsoft Research
– Incluído junto com Visual Studio in 2010
• Open source
– GitHub
• Cross platform
– Funciona com VS Code (e outros)
Sobre
• Desenvolvido pela Microsoft Research
– Incluído junto com Visual Studio in 2010
• Open source
– GitHub
• Cross platform
– Funciona com VS Code (e outros)
• Comunidade ativa
– fsharp.org
– F# Slack channel
Sobre
• Roda em cima do CLR
Sobre
• Roda em cima do CLR
• Interopera com outras linguagens .NET
Sobre
• Roda em cima do CLR
• Interopera com outras linguagens .NET
• É turing completa
Sobre
• Roda em cima do CLR
• Interopera com outras linguagens .NET
• É turing completa
• É possível usufruir de qualquer bibliotecas escritas em/para
C# tal como EntityFramework, ASP.NET, Xamarin, etc.
Introdução
Classes
Functional programming syntax
Imutabilidade
Não null por default
Igualdade estrutural
Tudo tem que ser inicializado!
Piping (F#)
Piping (F#)
Piping (F#)
Sistema de tipos algébrico
Tipos novos podem ser criados a
partir de tipos menores usando:
“AND” types
“AND” types
“OR” types
“OR” types
Em F# iriamos compor os tipos da seguinte forma
Em F# iriamos compor os tipos da seguinte forma
Em F# iriamos compor os tipos da seguinte forma
Em F# iriamos compor os tipos da seguinte forma
Xamarin Forms com F#
Xamarin Forms com
Fabulous (Half-Elmish)
Model, Messages e
updates são
definidos no F#
Views são definidas
com XAML e data
bindings
A model de retorno
da função de
update atualiza os
bindings
A função de Vew
retorna a page
com os bindings
Demo!
Xamarin Forms com
Fabulous (Full-Elmish)
Model, Messages e
updates são
definidos no F#
Views são definidas
com no F# utilizando
virtual UI
A model de retorno
da função de
update atualiza a
UI virtual
A função Vew
retorna uma UI
virtual e o
framework Elmish
procura pelas
diferenças e
atualiza a UI
Demo!
Visitem https://fsharpforfunandprofit.com/
Perguntas?
@lucasteles
@lucasteles42
eu@lucasteles.net

Mais conteúdo relacionado

Mais procurados

JavaFx - Guia Prático
JavaFx - Guia PráticoJavaFx - Guia Prático
JavaFx - Guia Práticodanielfc
 
Componentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkComponentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkFlávio Lisboa
 
Treinamento Appium - Introdução
Treinamento Appium - IntroduçãoTreinamento Appium - Introdução
Treinamento Appium - IntroduçãoAndré Salla
 
Aplicações ricas com JavaFX 2
Aplicações ricas com JavaFX 2Aplicações ricas com JavaFX 2
Aplicações ricas com JavaFX 2Claudiney Marques
 
Criando aplicações java fx em minutos
Criando aplicações java fx em minutosCriando aplicações java fx em minutos
Criando aplicações java fx em minutosBruno Oliveira
 
.NET 2015, ASP.NET 5, C# 6 e tudo mais
.NET 2015, ASP.NET 5, C# 6 e tudo mais.NET 2015, ASP.NET 5, C# 6 e tudo mais
.NET 2015, ASP.NET 5, C# 6 e tudo maisakamud
 
JavaFX 2 - TDC 2012
JavaFX 2 - TDC 2012JavaFX 2 - TDC 2012
JavaFX 2 - TDC 2012jesuinoPower
 
Desenvolvimento rápido de aplicações com JEE e JavaFX
Desenvolvimento rápido de aplicações com JEE e JavaFXDesenvolvimento rápido de aplicações com JEE e JavaFX
Desenvolvimento rápido de aplicações com JEE e JavaFXjesuinoPower
 
TDC2013: ExtJS 4: Dicas e Melhores Practicas
TDC2013: ExtJS 4: Dicas e Melhores PracticasTDC2013: ExtJS 4: Dicas e Melhores Practicas
TDC2013: ExtJS 4: Dicas e Melhores PracticasLoiane Groner
 
Zend Expressive de micro a fullstack
Zend Expressive de micro a fullstackZend Expressive de micro a fullstack
Zend Expressive de micro a fullstackLeonardo Tumadjian
 
Compartilhamento de código com Frameworks - CocoaHeads RJ
Compartilhamento de código com Frameworks - CocoaHeads RJCompartilhamento de código com Frameworks - CocoaHeads RJ
Compartilhamento de código com Frameworks - CocoaHeads RJRenan Protector
 
JavaFX - Uma visão Geral
JavaFX - Uma visão GeralJavaFX - Uma visão Geral
JavaFX - Uma visão GeralEder Nogueira
 
Guia para a Plataforma Java - Recursos e Novidades
Guia para a Plataforma Java - Recursos e NovidadesGuia para a Plataforma Java - Recursos e Novidades
Guia para a Plataforma Java - Recursos e Novidadesarmeniocardoso
 
JavaFX: A nova biblioteca gráfica da plataforma Java
JavaFX: A nova biblioteca gráfica da plataforma JavaJavaFX: A nova biblioteca gráfica da plataforma Java
JavaFX: A nova biblioteca gráfica da plataforma JavajesuinoPower
 
ASP.NET Web Forms X ASP.NET MVC
ASP.NET Web Forms X ASP.NET MVCASP.NET Web Forms X ASP.NET MVC
ASP.NET Web Forms X ASP.NET MVCguest489a65e
 

Mais procurados (20)

JavaFx - Guia Prático
JavaFx - Guia PráticoJavaFx - Guia Prático
JavaFx - Guia Prático
 
Componentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkComponentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada framework
 
Treinamento Appium - Introdução
Treinamento Appium - IntroduçãoTreinamento Appium - Introdução
Treinamento Appium - Introdução
 
Java Web Start
Java Web StartJava Web Start
Java Web Start
 
Aplicações ricas com JavaFX 2
Aplicações ricas com JavaFX 2Aplicações ricas com JavaFX 2
Aplicações ricas com JavaFX 2
 
Criando aplicações java fx em minutos
Criando aplicações java fx em minutosCriando aplicações java fx em minutos
Criando aplicações java fx em minutos
 
.NET 2015, ASP.NET 5, C# 6 e tudo mais
.NET 2015, ASP.NET 5, C# 6 e tudo mais.NET 2015, ASP.NET 5, C# 6 e tudo mais
.NET 2015, ASP.NET 5, C# 6 e tudo mais
 
JavaFX 2 - TDC 2012
JavaFX 2 - TDC 2012JavaFX 2 - TDC 2012
JavaFX 2 - TDC 2012
 
Desenvolvimento rápido de aplicações com JEE e JavaFX
Desenvolvimento rápido de aplicações com JEE e JavaFXDesenvolvimento rápido de aplicações com JEE e JavaFX
Desenvolvimento rápido de aplicações com JEE e JavaFX
 
Ria e Java FX
Ria e Java FXRia e Java FX
Ria e Java FX
 
TDC2013: ExtJS 4: Dicas e Melhores Practicas
TDC2013: ExtJS 4: Dicas e Melhores PracticasTDC2013: ExtJS 4: Dicas e Melhores Practicas
TDC2013: ExtJS 4: Dicas e Melhores Practicas
 
Java virtual machine quantas linguas fala a jvm2
Java virtual machine   quantas linguas fala a jvm2Java virtual machine   quantas linguas fala a jvm2
Java virtual machine quantas linguas fala a jvm2
 
Zend Expressive de micro a fullstack
Zend Expressive de micro a fullstackZend Expressive de micro a fullstack
Zend Expressive de micro a fullstack
 
Compartilhamento de código com Frameworks - CocoaHeads RJ
Compartilhamento de código com Frameworks - CocoaHeads RJCompartilhamento de código com Frameworks - CocoaHeads RJ
Compartilhamento de código com Frameworks - CocoaHeads RJ
 
JavaFX - Uma visão Geral
JavaFX - Uma visão GeralJavaFX - Uma visão Geral
JavaFX - Uma visão Geral
 
Guia para a Plataforma Java - Recursos e Novidades
Guia para a Plataforma Java - Recursos e NovidadesGuia para a Plataforma Java - Recursos e Novidades
Guia para a Plataforma Java - Recursos e Novidades
 
JavaFX: A nova biblioteca gráfica da plataforma Java
JavaFX: A nova biblioteca gráfica da plataforma JavaJavaFX: A nova biblioteca gráfica da plataforma Java
JavaFX: A nova biblioteca gráfica da plataforma Java
 
ASP.NET Web Forms X ASP.NET MVC
ASP.NET Web Forms X ASP.NET MVCASP.NET Web Forms X ASP.NET MVC
ASP.NET Web Forms X ASP.NET MVC
 
Entendendo o Xamarin UiTest no TDC
Entendendo o Xamarin UiTest no TDCEntendendo o Xamarin UiTest no TDC
Entendendo o Xamarin UiTest no TDC
 
JavaFX 2
JavaFX 2JavaFX 2
JavaFX 2
 

Semelhante a Elmish com xamarin.forms

Um melhor frontend com elm
Um melhor frontend com elmUm melhor frontend com elm
Um melhor frontend com elmLucas Teles
 
Ruby on Rails: Produtividade e diversão na web
Ruby on Rails: Produtividade e diversão na webRuby on Rails: Produtividade e diversão na web
Ruby on Rails: Produtividade e diversão na webRodrigo Manhães
 
Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Luis Borges Gouveia
 
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobileXamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobileakamud
 
Elixir - o que existe atrás do mistério
Elixir - o que existe atrás do mistérioElixir - o que existe atrás do mistério
Elixir - o que existe atrás do mistérioAlex Ferreira
 
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...iMasters
 
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)Douglas Fischer
 
01 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.101 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.1César Augusto Pessôa
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDDPHP Day Curitiba
 
Soluções escaláveis com Microsoft Orleans e Windows Azure
Soluções escaláveis com Microsoft Orleans e Windows AzureSoluções escaláveis com Microsoft Orleans e Windows Azure
Soluções escaláveis com Microsoft Orleans e Windows AzureVinicius Quaiato
 
KVM, Aeolus, DeltaCloud, Openshift e JBoss - Edgar Silva
KVM, Aeolus, DeltaCloud, Openshift e JBoss - Edgar Silva KVM, Aeolus, DeltaCloud, Openshift e JBoss - Edgar Silva
KVM, Aeolus, DeltaCloud, Openshift e JBoss - Edgar Silva Edgar Silva
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gofYan Justino
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHPRangel Javier
 

Semelhante a Elmish com xamarin.forms (20)

Um melhor frontend com elm
Um melhor frontend com elmUm melhor frontend com elm
Um melhor frontend com elm
 
Ruby on Rails: Produtividade e diversão na web
Ruby on Rails: Produtividade e diversão na webRuby on Rails: Produtividade e diversão na web
Ruby on Rails: Produtividade e diversão na web
 
Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)
 
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobileXamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile
 
Elixir - o que existe atrás do mistério
Elixir - o que existe atrás do mistérioElixir - o que existe atrás do mistério
Elixir - o que existe atrás do mistério
 
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
 
Web Tools Pt Br
Web Tools Pt BrWeb Tools Pt Br
Web Tools Pt Br
 
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
 
01 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.101 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.1
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
 
Microsoft .NET Framework
Microsoft .NET FrameworkMicrosoft .NET Framework
Microsoft .NET Framework
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Mobile tests usando AWS Device Farm
Mobile tests usando AWS Device FarmMobile tests usando AWS Device Farm
Mobile tests usando AWS Device Farm
 
Soluções escaláveis com Microsoft Orleans e Windows Azure
Soluções escaláveis com Microsoft Orleans e Windows AzureSoluções escaláveis com Microsoft Orleans e Windows Azure
Soluções escaláveis com Microsoft Orleans e Windows Azure
 
KVM, Aeolus, DeltaCloud, Openshift e JBoss - Edgar Silva
KVM, Aeolus, DeltaCloud, Openshift e JBoss - Edgar Silva KVM, Aeolus, DeltaCloud, Openshift e JBoss - Edgar Silva
KVM, Aeolus, DeltaCloud, Openshift e JBoss - Edgar Silva
 
Introdução C#
Introdução C#Introdução C#
Introdução C#
 
Aula 1a.ppt
Aula 1a.pptAula 1a.ppt
Aula 1a.ppt
 
Csharp
CsharpCsharp
Csharp
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gof
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
 

Mais de Lucas Teles

Type script alem do arroz com feijao
Type script   alem do arroz com feijaoType script   alem do arroz com feijao
Type script alem do arroz com feijaoLucas Teles
 
Conheça ROP - Programação orientada e trilhos​
Conheça ROP - Programação orientada e trilhos​Conheça ROP - Programação orientada e trilhos​
Conheça ROP - Programação orientada e trilhos​Lucas Teles
 
TypeScript - Além do arroz com feijão
TypeScript - Além do arroz com feijãoTypeScript - Além do arroz com feijão
TypeScript - Além do arroz com feijãoLucas Teles
 
Algoritmos genéticos aplicados no problema de roteirização de veículos com ja...
Algoritmos genéticos aplicados no problema de roteirização de veículos com ja...Algoritmos genéticos aplicados no problema de roteirização de veículos com ja...
Algoritmos genéticos aplicados no problema de roteirização de veículos com ja...Lucas Teles
 
Algoritmos genéticos aplicados em problemas de busca de caminho
Algoritmos genéticos aplicados em problemas de busca de caminhoAlgoritmos genéticos aplicados em problemas de busca de caminho
Algoritmos genéticos aplicados em problemas de busca de caminhoLucas Teles
 
Algoritmos geneticos
Algoritmos geneticosAlgoritmos geneticos
Algoritmos geneticosLucas Teles
 
Aplicações serverless com Blazor.pptx
Aplicações serverless com Blazor.pptxAplicações serverless com Blazor.pptx
Aplicações serverless com Blazor.pptxLucas Teles
 
Simplificando componentes com react hooks
Simplificando componentes com react hooksSimplificando componentes com react hooks
Simplificando componentes com react hooksLucas Teles
 
F# para devs c# tdc
F# para devs c#   tdcF# para devs c#   tdc
F# para devs c# tdcLucas Teles
 
Introducao a azure functions
Introducao a azure functionsIntroducao a azure functions
Introducao a azure functionsLucas Teles
 
Block chain para desenvolvedores
Block chain para desenvolvedoresBlock chain para desenvolvedores
Block chain para desenvolvedoresLucas Teles
 
Generalização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo softwareGeneralização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo softwareLucas Teles
 

Mais de Lucas Teles (15)

Type script alem do arroz com feijao
Type script   alem do arroz com feijaoType script   alem do arroz com feijao
Type script alem do arroz com feijao
 
Conheça ROP - Programação orientada e trilhos​
Conheça ROP - Programação orientada e trilhos​Conheça ROP - Programação orientada e trilhos​
Conheça ROP - Programação orientada e trilhos​
 
TypeScript - Além do arroz com feijão
TypeScript - Além do arroz com feijãoTypeScript - Além do arroz com feijão
TypeScript - Além do arroz com feijão
 
Algoritmos genéticos aplicados no problema de roteirização de veículos com ja...
Algoritmos genéticos aplicados no problema de roteirização de veículos com ja...Algoritmos genéticos aplicados no problema de roteirização de veículos com ja...
Algoritmos genéticos aplicados no problema de roteirização de veículos com ja...
 
Algoritmos genéticos aplicados em problemas de busca de caminho
Algoritmos genéticos aplicados em problemas de busca de caminhoAlgoritmos genéticos aplicados em problemas de busca de caminho
Algoritmos genéticos aplicados em problemas de busca de caminho
 
Algoritmos geneticos
Algoritmos geneticosAlgoritmos geneticos
Algoritmos geneticos
 
Aplicações serverless com Blazor.pptx
Aplicações serverless com Blazor.pptxAplicações serverless com Blazor.pptx
Aplicações serverless com Blazor.pptx
 
Simplificando componentes com react hooks
Simplificando componentes com react hooksSimplificando componentes com react hooks
Simplificando componentes com react hooks
 
C# 8 e além
C# 8 e alémC# 8 e além
C# 8 e além
 
F# para devs c# tdc
F# para devs c#   tdcF# para devs c#   tdc
F# para devs c# tdc
 
Introducao a azure functions
Introducao a azure functionsIntroducao a azure functions
Introducao a azure functions
 
F# para devs c#
F# para devs c#F# para devs c#
F# para devs c#
 
Block chain para desenvolvedores
Block chain para desenvolvedoresBlock chain para desenvolvedores
Block chain para desenvolvedores
 
Generalização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo softwareGeneralização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo software
 
Net - Threads
Net - ThreadsNet - Threads
Net - Threads
 

Elmish com xamarin.forms