Prévia do material em texto
GUIA TÉCNICO 01 • ENGENHARIA DE SOFTWARE MOBILE Arquiteturas e Padrões de Projeto Mobile Estruturação de camadas, gerenciamento de estado previsível e escalabilidade de código Aplicativos móveis operam em ambientes sujeitos a interrupções frequentes, mudanças de configuração de tela, restrições de memória e ciclos de vida rigorosos impostos pelo sistema operacional. Uma arquitetura bem definida isola as regras de negócio dos detalhes de interface e infraestrutura, evitando o acoplamento excessivo às classes do sistema. 1. Padrões de Apresentação A camada de apresentação conecta os dados à interface gráfica e reage às interações do usuário. A escolha do padrão influencia diretamente a testabilidade e a clareza do fluxo de dados. Padrão Funcionamento e Fluxo Cenário Recomendado MVC (Model-View- Controller) O Controller intermedia ações do usuário e atualizações no Model. Em plataformas mobile, tende a concentrar lógica de ciclo de vida e layout na mesma classe. Protótipos rápidos ou telas estáticas com mínima lógica de estado. MVP (Model-View- Presenter) A View é passiva e delega eventos ao Presenter por meio de contratos (interfaces). O Presenter coordena o Model e invoca métodos explícitos na View. Projetos legados com interfaces imperativas que exigem testes unitários isolados. MVVM (Model-View- ViewModel) O ViewModel expõe fluxos observáveis de estado sem manter referência direta à View. A interface assina esses fluxos e se recompõe automaticamente. Padrão consolidado para interfaces declarativas (SwiftUI e Jetpack Compose). MVI (Model-View- Intent) Adota fluxo unidirecional de dados (UDF). Intenções do usuário geram ações que reduzem o estado atual em um novo estado imutável único. Telas complexas com múltiplos estados concorrentes e necessidade de rastreabilidade. 2. Clean Architecture em Camadas A separação em camadas concêntricas garante que a regra de dependência aponte sempre para dentro: camadas externas conhecem as internas, mas o núcleo da aplicação permanece agnóstico a frameworks, bancos de dados ou bibliotecas de rede. Série Desenvolvimento Mobile • Módulo 01 Page 1 of 2 Camada de Domínio (Domain): Contém as entidades corporativas, casos de uso (Use Cases / Interactors) e interfaces de repositórios. É escrita exclusivamente na linguagem pura da plataforma. Camada de Dados (Data): Implementa os contratos definidos no domínio, coordenando fontes remotas (APIs REST/GraphQL), fontes locais e mapeadores (DTOs para modelos de domínio). Camada de Apresentação (Presentation): Abriga componentes visuais, gerenciadores de estado (ViewModels/Stores) e modelos específicos de exibição na tela. 3. Modularização e Injeção de Dependência À medida que a equipe cresce, manter todo o código em um único módulo eleva o tempo de compilação e favorece dependências circulares. A divisão em módulos por funcionalidade (feature modules) e módulos utilitários compartilhados (core modules) permite compilação paralela, encapsulamento rigoroso de visibilidade e entrega sob demanda. Para conectar essas peças sem acoplamento rígido, utiliza-se a Injeção de Dependência (DI). Ferramentas em tempo de compilação ou em tempo de execução fornecem instâncias configuradas conforme o escopo desejado (singleton da aplicação, ciclo de vida de sessão autenticada ou escopo de tela), facilitando a substituição por dublês de teste durante a verificação automatizada. Princípio Fundamental: A interface gráfica deve ser apenas uma função do estado atual. Quando o estado é imutável e centralizado, elimina-se uma classe inteira de falhas causadas por dessincronização entre componentes visuais e dados subjacentes. Série Desenvolvimento Mobile • Módulo 01 Page 2 of 2