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
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%");
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 ⚒