Globalcode – Open4education
Trilha – JavaPaulo Soares
Software Architect at McKinsey Digital Labs
Globalcode – Open4education
Convention Over Configuration
RoteiroMotivação
Exemplo prático
Resultados
Conclusão
Considerações finais
Globalcode – Open4education
Motivação
Produtividade
Globalcode – Open4education
Motivação
Produtividade Dev Time = # Decisions * Mean Implementation Time
Globalcode – Open4education
Motivação
Produtividade Dev Time = # Decisions * Mean Implementation Time
Menos decisões
Globalcode – Open4education
Motivação
Produtividade Dev Time = # Decisions * Mean Implementation Time
Menos decisões
Globalcode – Open4education
Motivação
Produtividade Dev Time = # Decisions * Mean Implementation Time
Menos decisões
Mais experiência
Globalcode – Open4education
Exemplo prático
Problema: Construir um ETL (Extract Transform Load)
Globalcode – Open4education
Exemplo prático
Problema: Construir um ETL (Extract Transform Load)
EntradaPlanilha CSV com dados de clientes
Globalcode – Open4education
Exemplo prático
Problema: Construir um ETL (Extract Transform Load)
EntradaPlanilha CSV com dados de clientes
Resultado esperadoDados dos clientes devem ser salvos em uma base de dados
Globalcode – Open4education
Exemplo prático
Problema: Construir um ETL (Extract Transform Load)
EntradaPlanilha CSV com dados de clientes
Resultado esperadoDados dos clientes devem ser salvos em uma base de dados
ContextoFormato do CSV e db schema são negociáveis.
Globalcode – Open4education
Exemplo prático – v1
Globalcode – Open4education
Exemplo prático – v1
Globalcode – Open4education
Exemplo prático – v1
Globalcode – Open4education
Exemplo prático – v1
Globalcode – Open4education
Exemplo prático – v1
Globalcode – Open4education
Exemplo prático – v1
Globalcode – Open4education
Exemplo prático – v2
Globalcode – Open4education
Exemplo prático – v2
Globalcode – Open4education
Exemplo prático – v2
Globalcode – Open4education
Exemplo prático – v3
ScaffoldingModelos e repositórios gerados automaticamente:
Globalcode – Open4education
Resultados
Total de linhas de código (5 colunas/classe)
Classes Linhas v1 Linhas v2 Redução (%)1 202 246 -22%2 315 328 -4%3 428 410 4%4 541 492 9%5 654 574 12%6 767 656 14%7 880 738 16%8 993 820 17%9 1106 902 18%10 1219 984 19%
Globalcode – Open4education
Resultados
Linhas adicionadas quando há uma nova entidade
Linhas v1 Linhas v2 Redução (%)113 82 27%
Globalcode – Open4education
Resultados
Linhas escritas usando scaffolding
Linhas v1 Linhas v3 Redução (%)113 2 98%
Globalcode – Open4education
Resultados
Complexidade do código
Globalcode – Open4education
Resultados
Complexidade do códigoAumentou devido ao uso de reflection e scaffolding
Globalcode – Open4education
Resultados
Complexidade do códigoAumentou devido ao uso de reflection e scaffolding.
Mais difícil de tornar o código mais flexível (e.g.: aceitar relacionamentos de modelos)
Globalcode – Open4education
Resultados
Segurança
Globalcode – Open4education
Resultados
SegurançaDeve-se ter cuidado com os usos de reflection
Globalcode – Open4education
Resultados
Extensibilidade
Globalcode – Open4education
Resultados
ExtensibilidadeExige menos tempo para que um desenvolvedor adicione novas entidades com as convenções esperadas.
Vai exigir um pouco mais de tempo para aceitar outros tipos de entradas (e.g.: FK)
Globalcode – Open4education
Conclusão
Há ganhos consideráveis de produtividade, especialmente se a técnica de scaffolding for utilizada.
Adicionar novas entidades pode ter o custo de executar um comando, porém isto exige que haja um investimento inicial maior de tempo.
Exige-se um planejamento maior (prever mudanças futuras) para não deixar o código inflexível.
Aspectos como segurança e complexidade devem ser considerados.
Globalcode – Open4education
Considerações finais
O que vai ser feito no futuro e com qual frequência?
Quais são os impactos em segurança e flexibilidade?
O investimento é válido?