Este repositório demonstra a geração automatizada de DTOs (Data Transfer Objects) para Android (Kotlin) e iOS (Swift) a partir de um contrato definido em Protobuf (.proto). Ao padronizar a definição do contrato em um arquivo .proto, é possível garantir a consistência entre diferentes plataformas, minimizando esforço manual e erros de sincronização.
- Consistência entre plataformas: Um único contrato
.protodescreve a estrutura dos dados. A partir dele, geramos DTOs coerentes em Kotlin e Swift. - Redução de erros manuais: Não é necessário escrever manualmente as classes de transporte. O processo automático garante que mudanças no contrato se refletirão imediatamente nos DTOs.
- Integração no Design System: Ao adotar esse processo, o time de tecnologia pode incorporar a geração de DTOs ao pipeline do Design System, assegurando que componentes em diferentes plataformas utilizem dados consistentes.
Antes de executar o script de geração, verifique se você possui:
-
Protoc (Protocol Buffers Compiler)
-
No macOS via Homebrew:
brew install protobuf
-
Verifique a instalação:
protoc --version
Deve retornar algo como
libprotoc 3.X.X. -
-
Plugin Kotlin para Protobuf (
protoc-gen-kotlin.jar)-
Baixe a versão desejada do repositório oficial. Por exemplo:
curl -Lo protoc-gen-kotlin.jar \ https://repo1.maven.org/maven2/com/google/protobuf/protoc-gen-kotlin/1.3.0/protoc-gen-kotlin-1.3.0-jvm8.jar
-
Coloque este arquivo na raiz do projeto.
-
-
Swift Protobuf (para gerar o código Swift)
- No macOS, por exemplo:
brew install swift-protobuf
Isso disponibiliza o
protoc-gen-swiftno seu PATH. - No macOS, por exemplo:
progress-indicator-poc/
├─ android/ # DTOs gerados em Kotlin serão colocados aqui após o script
├─ ios/ # DTOs gerados em Swift serão colocados aqui após o script
├─ proto/
│ └─ progress_indicator.proto # Definição do contrato Protobuf
├─ scripts/
│ └─ generate-dtos.sh # Script para gerar os DTOs
├─ README.md
└─ generation.log # Log do processo de geração (após rodar o script)-
Clone o repositório:
git clone https://github.com/seu-usuario/progress-indicator-poc.git cd progress-indicator-poc -
Coloque o
protoc-gen-kotlin.jarna raiz:curl -Lo protoc-gen-kotlin.jar\ https://repo1.maven.org/maven2/com/google/protobuf/protoc-gen-kotlin/1.3.0/protoc-gen-kotlin-1.3.0-jvm8.jar -
Execute o script:
./scripts/generate-dtos.sh -
Verifique o resultado:
- O diretório
android/conterá os DTOs Kotlin correspondentes ao.proto. - O diretório
ios/conterá os DTOs Swift.
- O diretório
O código gerado para as plataformas Android (Kotlin) e iOS (Swift) possui as seguintes características:
-
Orientação pela Ferramenta:
- O código Kotlin e Swift é gerado pelo
protoce seus plugins. Isso garante que as estruturas sejam fiéis ao contrato definido no arquivo.proto. - Não há customizações no código de geração. Tudo o que é definido no
.protoé refletido automaticamente nos DTOs.
- O código Kotlin e Swift é gerado pelo
-
Legibilidade vs. Padrão:
- O código gerado pode parecer mais extenso e menos idiomático do que um DTO feito à mão. Isso ocorre porque o objetivo é garantir conformidade com o contrato Protobuf e o runtime do
SwiftProtobufe doKotlin Protobuf Extensions. - Os desenvolvedores raramente precisam editar o código gerado. Eles apenas interagem com as propriedades e métodos públicos disponibilizados pelas classes e structs geradas.
- O código gerado pode parecer mais extenso e menos idiomático do que um DTO feito à mão. Isso ocorre porque o objetivo é garantir conformidade com o contrato Protobuf e o runtime do
-
Manutenção Simplificada:
- Uma alteração no arquivo
.protoatualiza automaticamente todos os DTOs, eliminando a necessidade de manter versões manuais em iOS e Android. - Isso garante consistência entre plataformas e reduz a chance de erros de comunicação entre diferentes times.
- Uma alteração no arquivo
-
Padronização de Dados:
- Com o uso de Protobuf, o mesmo contrato de dados é aplicado para todas as plataformas (iOS, Android, ou qualquer outra que seja adicionada no futuro).
-
Escalabilidade:
- Com o processo estabelecido, adicionar novos campos ou criar novas mensagens de transporte é trivial. Basta alterar o
.proto, rodar o script e todos os DTOs são atualizados. - Isso permite escalar o Design System de forma rápida e eficiente.
- Com o processo estabelecido, adicionar novos campos ou criar novas mensagens de transporte é trivial. Basta alterar o
-
Redução de Débitos Técnicos:
- Quando os DTOs são feitos manualmente, a equipe frequentemente esquece de atualizar todos os arquivos. Usar uma única fonte de verdade (o
.proto) elimina esse risco.
- Quando os DTOs são feitos manualmente, a equipe frequentemente esquece de atualizar todos os arquivos. Usar uma única fonte de verdade (o