Back to projectsStreaming de vídeo

Streaming de vídeo

Um ecossistema de streaming multiplataforma projetado para oferecer uma experiência fluida de consumo de conteúdo

RoleTech Lead Mobile
Reading time4 min
Stack
Flutter
Índice

O PlayFlix é um ecossistema de streaming multiplataforma projetado para oferecer uma experiência fluida de consumo de conteúdo em diferentes dispositivos (atualmente focado em Mobile e TV). Para sustentar esse ecossistema, foi desenvolvido um projeto estruturado para suportar o crescimento do produto, a reutilização de código e a alta produtividade do time de engenharia.


O Problema

Antes da reestruturação, o PlayFlix enfrentava sérios gargalos de engenharia decorrentes de uma arquitetura fragmentada e descentralizada. O desenvolvimento simultâneo para múltiplas plataformas (Mobile e TV) gerava uma massiva duplicação de código, onde regras de negócio idênticas precisavam ser reescritas e validadas separadamente para cada ambiente, elevando o custo operacional e o tempo de time-to-market.

A falta de padronização na estrutura dos módulos resultava em um alto débito técnico, com fluxos reativos inconsistentes na interface que frequentemente levavam a falhas silenciosas (crashes por parsing de API ou erros de rede não tratados).

Além disso, o processo de internacionalização era frágil e propenso a erros em produção, enquanto o tempo de onboarding e a produtividade dos desenvolvedores eram severamente afetados pela necessidade de configurar novas funcionalidades manualmente do zero.

Havia uma clara ausência de governança automatizada, o que dificultava a escalabilidade do ecossistema e transformava a tecnologia em um gargalo para o crescimento do negócio.


A Solução

Para solucionar esses desafios, foi desenhada uma arquitetura moderna baseada em Monorepo, Clean Architecture e Princípios SOLID:

  • Estratégia de Monorepo com Melos: Centralização dos aplicativos (mobile, tv) e pacotes compartilhados (core_module, design_system) em um único repositório. Toda a lógica de negócios e os componentes visuais customizados são reutilizados nativamente pelas duas plataformas.

  • Segregação de Responsabilidades (Domain-Driven Design flavor): Divisão estrita da lógica de backend local em 4 camadas bem delimitadas:

    1. Data: Manipulação física dos dados (adaptadores e repositórios).

    2. Domain: Regras de negócio puras através de Casos de Uso (Usecases) e Entidades.

    3. Infrastructure: Detalhes de tecnologia (como interceptores HTTP).

    4. Services: Orquestração das operações para o app.

  • Inversão de Dependência (DIP) e Injeção Automatizada: Uso de interfaces abstratas desacopladas de implementações concretas, gerenciadas por um contêiner de injeção de dependências.

  • State Pattern com Sealed Classes e ValueNotifier: Adoção de um fluxo reativo previsível na UI, onde a tela reflete estados selados (InitialState, LoadingState, SuccessState, ErrorState), eliminando estados inconsistentes.

  • Scaffolding Automatizado com Mason: Criação de geradores de código (templates) que automatizam instantaneamente a estrutura de novos módulos de negócio com apenas um comando no terminal.

  • Tratamento Funcional de Erros (Padrão Either): Implementação do tipo Output<T>, obrigando o desenvolvedor a tratar explicitamente o sucesso ou a falha antes de expor os dados à interface.

  • Internacionalização Estrita com Slang: Centralização de traduções em JSON com geração de tipos estáticos, garantindo que chaves ausentes quebrem em tempo de compilação, e não em produção.


A Stack Tecnológica

A infraestrutura técnica do projeto foi selecionada cirurgicamente para prover performance e manutenibilidade:

  • Linguagem Principal: Dart

  • Framework: Flutter

  • Gerenciamento de Monorepo: Melos

  • Gerenciamento de Rotas: Routefly (roteamento baseado em arquivos/pastas)

  • Gerenciamento de Estado: ValueNotifier + State Pattern (Sealed Classes)

  • Injeção de Dependências: Auto Injector

  • Automação de Código (Scaffolding): Mason CLI

  • Internacionalização (i18n): Slang & Build Runner

  • Tratamento de Erros: Result Pattern result_dart (Encapsulado no tipo Output<T>)

  • Integração com Microserviços: Dio HTTP


O Resultado

A reestruturação arquitetural do PlayFlix trouxe retornos expressivos para a operação de tecnologia:

  • Escalabilidade Multiplataforma Real: O app de TV pôde ser desenvolvido consumindo mais de 80% das regras de negócio já validadas no core_module, reduzindo drasticamente o esforço de engenharia na segunda plataforma.

  • Aumento Crítico na Velocidade de Desenvolvimento: O tempo necessário para configurar a estrutura de um novo módulo de negócio caiu de horas para segundos através do uso dos comandos automatizados do Mason CLI.

  • Altíssima Testabilidade e Robustez: Graças à Inversão de Dependência (DIP), os testes unitários das regras de negócio passaram a ser criados isoladamente por meio de mocks rápidos, elevando a cobertura de testes do projeto.

  • Interface Resiliente a Falhas: Erros de rede ou parsing de API pararam de quebrar as telas. O Result Pattern garantiu que a UI sempre saiba exatamente como renderizar um estado de erro amigável ao usuário.

  • Governança de Código Automatizada: A unificação dos scripts via Melos (melos format e melos analyze) integrada ao CI/CD mitigou o débito técnico, impedindo que trechos fora do padrão de nomenclatura e estilo cheguem à branch principal.

 

No fim do dia, essa arquitetura transformou a tecnologia do PlayFlix de um centro de custo em um acelerador de crescimento, permitindo que o negócio mude de direção rápido, lance produtos antes da concorrência e mantenha uma infraestrutura robusta e barata de manter.