SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
Desenvolvendo aplicativos multi-tenant com
Xamarin.Forms




Alexandre Costa - Microsoft MVP & Mobile Engineer @ ArcTouch

Oberdan Ferreira - Principal Engineer @ ArcTouch
Desenvolvendo aplicativos multi-tenant com
Xamarin.Forms




Alexandre Costa - Microsoft MVP & Mobile Engineer @ ArcTouch

Oberdan Ferreira - Principal Engineer @ ArcTouch
AGENDA | 📝
• MOTIVAÇÕES
• ARQUITETURA
• STACK DE DESENVOLVIMENTO
• DESAFIOS
• ROADMAP
❔

QUE RAIOS É MULTITENANCY?
MOTIVAÇÕES | 🤗
•Cliente possui várias marcas associadas
•Exemplo: B2W (Submarino, Americanas e Shoptime)
•Apps semelhantes em look and feel e lógica de negócio
•API unificada
MÚLTIPLOS APPS
🆚
ÚNICO APP
🏛

ARQUITETURA
ARQUITETURA | OPÇÕES
• Fazer fork de repositório para cada marca (múltiplos projetos) ❌
• Múltiplos repositórios. Dificulta manutenção.
• Conflitos de merge ao modificar arquivos chave como AndroidManifest.xml
•Criar uma build config pra cada marca (mesmo projeto) ❌
• Código espalhado de diretivas #IF #ENDIF
• Encontro de erros de código só em tempo de compilação
• Manutenção complicada
•Não fazer nada especial e usar if/switch para configuração ❌
• Código espalhado de diretivas if/switch
• Código referente à outras marcas que nunca vai ser utilizado pra aquela marca
ARQUITETURA | OPÇÕES
• Separar em múltiplos projetos ✅
•Única solution
•Separação de projetos por especificidades (marca, plataforma e geral)
•Só carrega o que precisa
•Sem ifs espalhados pelo código. Manutenção facilitada!
•Customizações são "injetadas"
ARQUITETURA | 🏛
ARQUITETURA | RESPONSABILIDADES
• Identificar dados sobre a marca
• Injetar lógica específica da marca (texto de botão, função de cálculo, etc)
• Resources específicos (assets, esquema de cores, etc.)
• Identificar API Keys para integrações específicas (push notifications, etc.)
• AndroidManifest.xml e Info.plist
• Gerar os artefatos (APK e IPA)
ARQUITETURA | RESPONSABILIDADES
• Configurações específicas de plataforma mas agnósticas de marca
• CustomRenderers, Platform Effects, DependencyService
• Gerenciar integrações específicas (push notifications, etc.)
• Gerenciar ciclo de vida do app
• MainApplication, MainActivityBase e AppDelegateBase
ARQUITETURA | RESPONSABILIDADES
• Configurações genéricas (agnósticas de plataforma e marca)
• Lógica de negócio agnóstica de marca
• Conexão com API
• Recebe a marca passada desde o Output Project
• Não deve ter lógica condicional baseada na marca
ARQUITETURA | RESPONSABILIDADES






if (brand.Name == "Brand1")

Console.WriteLine("Desconto de 10%");

else if (brand.Name == "Brand2")

Console.WriteLine("Desconto de 20%");

🥞

STACK
STACK | 🥞
• Xamarin.Forms
• Prism com DryIoC
• Refit
• Fusillade
• Akavache
• HockeyApp
• UrbanAirship
• MixPanel
• SkiaSharp
• Xamarin Plugins - Connectivity, Settings e DeviceInfo
🤔

DESAFIOS
DESAFIOS | 🤔
• Interface consistente em diferentes devices
• Bom desempenho em dispositivos modestos (feature phones)
• Xamarin Profiler
• Mudança de Unity pra DryIoC
• Automação de testes de UI - reduzir o tempo dos testes de regressão
pre-release
• Modo de demonstração (offline)
• Tamanho do APK e IPA
🚀

PLANOS PARA O FUTURO
PLANOS PARA O FUTURO | 🚀
• Migração para netstandard2 🙏
• Boa cobertura de testes de UI rodando no AppCenter 📲
• Diminuir o tempo dos testes de regressão
• Automatização do processo de criação de Output Projects
para novas marcas ⚒
😱
MAS A APPLE NÃO IA BANIR XAMARIN APPS?
APPLE BAN | 😱
❔
PERGUNTAS
Alexandre Santos Costa
@magoolation
Oberdan Bitencourt Ferreira
@OberdanFerreira
arctouch.com/careers
🙏
OBRIGADO
👏 🤘
👏
🤘
👏
🤘
👏
🤘
👏
🤘
👏
🤘
👏
🤘 👏
🤘
👏
🤘
👏
🤘
👏
🤘
👏
🤘
👏
🤘 👏
🤘
👏🤘
👏
🤘
👏
🤘
👏
🤘
👏
🤘 👏
🤘
👏
🤘
👏
🤘
👏
🤘
👏
🤘
👏
🤘

Mais conteúdo relacionado

Semelhante a Desenvolvendo aplicativos multi-tenant com Xamarin.Forms

DevCommerce Conference 2016 - Workshop: Velocidade e confiabilidade em e-comm...
DevCommerce Conference 2016 - Workshop: Velocidade e confiabilidade em e-comm...DevCommerce Conference 2016 - Workshop: Velocidade e confiabilidade em e-comm...
DevCommerce Conference 2016 - Workshop: Velocidade e confiabilidade em e-comm...iMasters
 
B2B no Mercado Eletrônico: Do SaaS ao PaaS
B2B no Mercado Eletrônico: Do SaaS ao PaaSB2B no Mercado Eletrônico: Do SaaS ao PaaS
B2B no Mercado Eletrônico: Do SaaS ao PaaSRicardo Pardini
 
Titanium Mobile - Campus Party Recife 2
Titanium Mobile - Campus Party Recife 2Titanium Mobile - Campus Party Recife 2
Titanium Mobile - Campus Party Recife 2Eric Cavalcanti
 
Opções de Backends para seus apps móveis: Análise e Arquiteturas
Opções de Backends para seus apps móveis: Análise e ArquiteturasOpções de Backends para seus apps móveis: Análise e Arquiteturas
Opções de Backends para seus apps móveis: Análise e ArquiteturasJose Papo, MSc
 
RIA e Flex - Dando formas à Inovação
RIA e Flex - Dando formas à InovaçãoRIA e Flex - Dando formas à Inovação
RIA e Flex - Dando formas à InovaçãoLeonardo Braga
 
WSO2 - Portfólio de Produtos, Soluções e Suportes
WSO2 - Portfólio de Produtos, Soluções e SuportesWSO2 - Portfólio de Produtos, Soluções e Suportes
WSO2 - Portfólio de Produtos, Soluções e SuportesEdgar Silva
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sitesthiagolima
 
Mobile Ria Para Aplicacoes Para Negocios
Mobile Ria Para Aplicacoes Para NegociosMobile Ria Para Aplicacoes Para Negocios
Mobile Ria Para Aplicacoes Para NegociosRodney Repullo
 
A importância de DDD e o Domain Model na construção de APIs!
A importância de DDD e o Domain Model na construção de APIs!A importância de DDD e o Domain Model na construção de APIs!
A importância de DDD e o Domain Model na construção de APIs!Isaac de Souza
 
Construindo APIs Mobile
Construindo APIs MobileConstruindo APIs Mobile
Construindo APIs MobileSensedia
 
A nova geração da arquitetura web para a era da nuvem
A nova geração da arquitetura web para a era da nuvemA nova geração da arquitetura web para a era da nuvem
A nova geração da arquitetura web para a era da nuvemCloves Moreira Junior
 
Apresentação de Lançamento do RAD Studio XE7
Apresentação de Lançamento do RAD Studio XE7Apresentação de Lançamento do RAD Studio XE7
Apresentação de Lançamento do RAD Studio XE7Fernando Rizzato
 
Desenvolvimento Orientado a API (e extraindo existentes com PHP)
Desenvolvimento Orientado a API (e extraindo existentes com PHP)Desenvolvimento Orientado a API (e extraindo existentes com PHP)
Desenvolvimento Orientado a API (e extraindo existentes com PHP)Flávio Lisboa
 
Android Dev Conference 2017 - Entrega Contínua para Mobile
Android Dev Conference 2017 - Entrega Contínua para MobileAndroid Dev Conference 2017 - Entrega Contínua para Mobile
Android Dev Conference 2017 - Entrega Contínua para MobileiMasters
 
O que é angular?
O que é angular?O que é angular?
O que é angular?Caio Rolla
 
Seminário de Desenvolvimento Mobile - Etec Cafelândia
Seminário de Desenvolvimento Mobile - Etec CafelândiaSeminário de Desenvolvimento Mobile - Etec Cafelândia
Seminário de Desenvolvimento Mobile - Etec CafelândiaDiego Cavalca
 
WSO2 - Visão Geral de Negócios
WSO2 - Visão Geral de NegóciosWSO2 - Visão Geral de Negócios
WSO2 - Visão Geral de NegóciosEdgar Silva
 
API management: um aliado para construção de APIs
API management: um aliado para construção de APIsAPI management: um aliado para construção de APIs
API management: um aliado para construção de APIsRafael de Paula Souza
 
WSO2 Platform: Conectando Empresas, negócios e pessoas
WSO2 Platform: Conectando Empresas, negócios e pessoasWSO2 Platform: Conectando Empresas, negócios e pessoas
WSO2 Platform: Conectando Empresas, negócios e pessoasWSO2
 

Semelhante a Desenvolvendo aplicativos multi-tenant com Xamarin.Forms (20)

DevCommerce Conference 2016 - Workshop: Velocidade e confiabilidade em e-comm...
DevCommerce Conference 2016 - Workshop: Velocidade e confiabilidade em e-comm...DevCommerce Conference 2016 - Workshop: Velocidade e confiabilidade em e-comm...
DevCommerce Conference 2016 - Workshop: Velocidade e confiabilidade em e-comm...
 
B2B no Mercado Eletrônico: Do SaaS ao PaaS
B2B no Mercado Eletrônico: Do SaaS ao PaaSB2B no Mercado Eletrônico: Do SaaS ao PaaS
B2B no Mercado Eletrônico: Do SaaS ao PaaS
 
Titanium Mobile - Campus Party Recife 2
Titanium Mobile - Campus Party Recife 2Titanium Mobile - Campus Party Recife 2
Titanium Mobile - Campus Party Recife 2
 
Opções de Backends para seus apps móveis: Análise e Arquiteturas
Opções de Backends para seus apps móveis: Análise e ArquiteturasOpções de Backends para seus apps móveis: Análise e Arquiteturas
Opções de Backends para seus apps móveis: Análise e Arquiteturas
 
RIA e Flex - Dando formas à Inovação
RIA e Flex - Dando formas à InovaçãoRIA e Flex - Dando formas à Inovação
RIA e Flex - Dando formas à Inovação
 
WSO2 - Portfólio de Produtos, Soluções e Suportes
WSO2 - Portfólio de Produtos, Soluções e SuportesWSO2 - Portfólio de Produtos, Soluções e Suportes
WSO2 - Portfólio de Produtos, Soluções e Suportes
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sites
 
Mobile Ria Para Aplicacoes Para Negocios
Mobile Ria Para Aplicacoes Para NegociosMobile Ria Para Aplicacoes Para Negocios
Mobile Ria Para Aplicacoes Para Negocios
 
A importância de DDD e o Domain Model na construção de APIs!
A importância de DDD e o Domain Model na construção de APIs!A importância de DDD e o Domain Model na construção de APIs!
A importância de DDD e o Domain Model na construção de APIs!
 
Construindo APIs Mobile
Construindo APIs MobileConstruindo APIs Mobile
Construindo APIs Mobile
 
A nova geração da arquitetura web para a era da nuvem
A nova geração da arquitetura web para a era da nuvemA nova geração da arquitetura web para a era da nuvem
A nova geração da arquitetura web para a era da nuvem
 
Conheça a Plataforma Xamarin
Conheça a Plataforma XamarinConheça a Plataforma Xamarin
Conheça a Plataforma Xamarin
 
Apresentação de Lançamento do RAD Studio XE7
Apresentação de Lançamento do RAD Studio XE7Apresentação de Lançamento do RAD Studio XE7
Apresentação de Lançamento do RAD Studio XE7
 
Desenvolvimento Orientado a API (e extraindo existentes com PHP)
Desenvolvimento Orientado a API (e extraindo existentes com PHP)Desenvolvimento Orientado a API (e extraindo existentes com PHP)
Desenvolvimento Orientado a API (e extraindo existentes com PHP)
 
Android Dev Conference 2017 - Entrega Contínua para Mobile
Android Dev Conference 2017 - Entrega Contínua para MobileAndroid Dev Conference 2017 - Entrega Contínua para Mobile
Android Dev Conference 2017 - Entrega Contínua para Mobile
 
O que é angular?
O que é angular?O que é angular?
O que é angular?
 
Seminário de Desenvolvimento Mobile - Etec Cafelândia
Seminário de Desenvolvimento Mobile - Etec CafelândiaSeminário de Desenvolvimento Mobile - Etec Cafelândia
Seminário de Desenvolvimento Mobile - Etec Cafelândia
 
WSO2 - Visão Geral de Negócios
WSO2 - Visão Geral de NegóciosWSO2 - Visão Geral de Negócios
WSO2 - Visão Geral de Negócios
 
API management: um aliado para construção de APIs
API management: um aliado para construção de APIsAPI management: um aliado para construção de APIs
API management: um aliado para construção de APIs
 
WSO2 Platform: Conectando Empresas, negócios e pessoas
WSO2 Platform: Conectando Empresas, negócios e pessoasWSO2 Platform: Conectando Empresas, negócios e pessoas
WSO2 Platform: Conectando Empresas, negócios e pessoas
 

Desenvolvendo aplicativos multi-tenant com Xamarin.Forms

  • 1. Desenvolvendo aplicativos multi-tenant com Xamarin.Forms 
 
 Alexandre Costa - Microsoft MVP & Mobile Engineer @ ArcTouch
 Oberdan Ferreira - Principal Engineer @ ArcTouch
  • 2. Desenvolvendo aplicativos multi-tenant com Xamarin.Forms 
 
 Alexandre Costa - Microsoft MVP & Mobile Engineer @ ArcTouch
 Oberdan Ferreira - Principal Engineer @ ArcTouch
  • 3. AGENDA | 📝 • MOTIVAÇÕES • ARQUITETURA • STACK DE DESENVOLVIMENTO • DESAFIOS • ROADMAP
  • 4. ❔
 QUE RAIOS É MULTITENANCY?
  • 5. MOTIVAÇÕES | 🤗 •Cliente possui várias marcas associadas •Exemplo: B2W (Submarino, Americanas e Shoptime) •Apps semelhantes em look and feel e lógica de negócio •API unificada
  • 8. ARQUITETURA | OPÇÕES • Fazer fork de repositório para cada marca (múltiplos projetos) ❌ • Múltiplos repositórios. Dificulta manutenção. • Conflitos de merge ao modificar arquivos chave como AndroidManifest.xml •Criar uma build config pra cada marca (mesmo projeto) ❌ • Código espalhado de diretivas #IF #ENDIF • Encontro de erros de código só em tempo de compilação • Manutenção complicada •Não fazer nada especial e usar if/switch para configuração ❌ • Código espalhado de diretivas if/switch • Código referente à outras marcas que nunca vai ser utilizado pra aquela marca
  • 9. ARQUITETURA | OPÇÕES • Separar em múltiplos projetos ✅ •Única solution •Separação de projetos por especificidades (marca, plataforma e geral) •Só carrega o que precisa •Sem ifs espalhados pelo código. Manutenção facilitada! •Customizações são "injetadas"
  • 11. ARQUITETURA | RESPONSABILIDADES • Identificar dados sobre a marca • Injetar lógica específica da marca (texto de botão, função de cálculo, etc) • Resources específicos (assets, esquema de cores, etc.) • Identificar API Keys para integrações específicas (push notifications, etc.) • AndroidManifest.xml e Info.plist • Gerar os artefatos (APK e IPA)
  • 12. ARQUITETURA | RESPONSABILIDADES • Configurações específicas de plataforma mas agnósticas de marca • CustomRenderers, Platform Effects, DependencyService • Gerenciar integrações específicas (push notifications, etc.) • Gerenciar ciclo de vida do app • MainApplication, MainActivityBase e AppDelegateBase
  • 13. ARQUITETURA | RESPONSABILIDADES • Configurações genéricas (agnósticas de plataforma e marca) • Lógica de negócio agnóstica de marca • Conexão com API • Recebe a marca passada desde o Output Project • Não deve ter lógica condicional baseada na marca
  • 14. ARQUITETURA | RESPONSABILIDADES 
 
 
 if (brand.Name == "Brand1")
 Console.WriteLine("Desconto de 10%");
 else if (brand.Name == "Brand2")
 Console.WriteLine("Desconto de 20%");

  • 16. STACK | 🥞 • Xamarin.Forms • Prism com DryIoC • Refit • Fusillade • Akavache • HockeyApp • UrbanAirship • MixPanel • SkiaSharp • Xamarin Plugins - Connectivity, Settings e DeviceInfo
  • 18. DESAFIOS | 🤔 • Interface consistente em diferentes devices • Bom desempenho em dispositivos modestos (feature phones) • Xamarin Profiler • Mudança de Unity pra DryIoC • Automação de testes de UI - reduzir o tempo dos testes de regressão pre-release • Modo de demonstração (offline) • Tamanho do APK e IPA
  • 20. PLANOS PARA O FUTURO | 🚀 • Migração para netstandard2 🙏 • Boa cobertura de testes de UI rodando no AppCenter 📲 • Diminuir o tempo dos testes de regressão • Automatização do processo de criação de Output Projects para novas marcas ⚒
  • 21. 😱 MAS A APPLE NÃO IA BANIR XAMARIN APPS?
  • 22. APPLE BAN | 😱
  • 23. ❔ PERGUNTAS Alexandre Santos Costa @magoolation Oberdan Bitencourt Ferreira @OberdanFerreira arctouch.com/careers
  • 24. 🙏 OBRIGADO 👏 🤘 👏 🤘 👏 🤘 👏 🤘 👏 🤘 👏 🤘 👏 🤘 👏 🤘 👏 🤘 👏 🤘 👏 🤘 👏 🤘 👏 🤘 👏 🤘 👏🤘 👏 🤘 👏 🤘 👏 🤘 👏 🤘 👏 🤘 👏 🤘 👏 🤘 👏 🤘 👏 🤘 👏 🤘