Desenvolvimento

17 jul, 2014

Experiência AngularJS + Java em Produção

Publicidade

divedoo

Olá, pessoal!

No artigo de hoje vou falar um pouco sobre a experiência que tivemos aqui na ITSLabs com o desenvolvimento de um produto usando AngularJS e hoje está em produção. O produto ainda é um MVP versão 1.0.0 e foi de desenvolvido em 45-50 dias. Venho trabalhando com AngularJS no dia a dia há quase um ano e criei o grupo AngularJS-Brazil no Google Groups.

Mais uma vez reforço para quem está chegando: quer aprender qualquer tecnologia? Saia do CRUD! Só assim você vai poder aprender de verdade.

ITSLabs

Antes de começar falando do projeto, deixa eu falar rapidamente da ITS. A ITS é uma start-up voltada para criação de produtos web e mobile. Aqui buscamos resolver os problemas dos nossos clientes identificamos qual a tecnologia resolve melhor o problema. Portanto, a tecnologia nada mais é do que apenas uma ferramenta para atingir o objetivo.

Hoje temos projeto com AngularJS, NodeJS, Java etc. Em breve, assim que tivermos um ok do cliente, teremos mais um case que vou compartilhar aqui com vocês de um projeto NodeJS + AngularJS. A ITSLabs não é consultoria, ou fábrica de software que tem o foco apenas em desenvolvimento. Vamos um pouco além… E precisamos entregar valor ao negócio do cliente e também trazer valor para nossa equipe técnica. Já rejeitamos projetos que financeiramente seriam ótimos, mas valor entregue tecnicamente para nossa equipe seria quase zero. Nosso dia a dia é bem Agile, trabalhamos 95% remoto e pouco focado em horas trabalhadas ou que horas você entrou hoje e saiu ontem. Atender aos prazos com qualidade é o nosso maior ativo.

DiveDoo

É uma plataforma que busca resolver o problema de quem busca acessório, curso, equipamentos na área de mergulho, mas não sabe como e onde encontrar. Fazendo uma pesquisa no Google, as informações estão espalhadas e alguns sites podem não ser confiáveis. Baseado nisso, foi criado a plataforma pela mergulhadora Gabriela Galvão.

Nossa experiência com AngularJS

Esse foi o nosso terceiro projeto com AngularJS em produção, os dos primeiros eram projetos bem menores com relação ao DiveDoo. Ter escolhido AngularJS foi uma excelente escolha, por alguns motivos:

  • Manutenção do lado do cliente: ganhamos muito na organização de js, css etc. Isso foi fantástico e crucial para o desenvolvimento;
  • Integração com back-end: ter o back-end e front 100% independente é fantástico! Podemos mudar para qualquer outra tecnologia sem precisar tocar no código do cliente;
  • Ter programadores trabalhando em paralelo e separado sem bloqueios: isso ajudou bastante, alguns programadores back-end odeiam front-end (eu era um desses, mas deixei de ser graças ao AngularJS) e aqui podemos manter cada um trabalhando do seu lado e se comunicando apenas através de uma API REST.
  • IE: esse cara é uma dor de cabeça. Então, se você pensa em querer dar suporte para versões antigas como 8 ou inferior, esqueça o AngularJS. Ainda que o pessoal da Google fale que nas versões mais antigas do AngularJS eles oferecem suporte, algumas coisas não funcionam bem. E dependendo da versão do Windows e do IE, encontramos incompatibilidade. Se você tem um projeto que vai dá suporte a esse camarada em versões antigas, pode ir buscando outro framework, porque o AngularJS não vai rolar. E o problema não é do AngularJS, na verdade ele nasceu sem vontade nenhum em querer ajudar o browser da Microsoft.

Tools

Usar Yeoman & Grunt é um fator de produtividade. Criamos uma estrutura do lado do back-end, onde o desenvolver front-end consegue testar a aplicação com back-end localmente e podendo sempre pegar o ultimo código que foi comitado. Separamos isso em módulos :

  • Web: aqui é a versão que vai para o servidor remoto;
  • Core: todo back-end;
  • Webdev: aqui é onde o programador front-end trabalha e segue toda a estrutura do Yeoman. Se for preciso debugar um código local, basta subir a aplicação a partir desse módulo usando o comando: grunt Server e pronto. O Server vai subir em porta e IP diferente da aplicação que possui o back-end. Quando o trabalho de front-end estiver concluído e precisar ser integrado com o back-end, basta executar um grunt build e todo código do front é minificado e colocado no modulo de web para ser deployed. Para quem está trabalhando no front-end isso é transparente.

Montamos essa estrutura, pois em projetos passados sofremos bastante com isso. Toda a estrutura em um único projeto (quando ele não é grande, ou seja, poucas funcionalidades) funciona bem.

Aprendizado

Aprendemos que sem Yeoman é querer sofrer. Realmente é uma ferramenta poderosa e querer fazer tudo na mão é perda de tempo – exceto se você está querendo aprender criando seus projetos house made. Mas projeto que vai para produção, não recomendo.

UI-Router: esse é o cara! Muito bom e facilita bem o uso de rotas dentro do AngularJS. Quando você usa o UI-router que percebe a limitação que temos com as rotas default com AngularJS. Em breve vou fazer um artigo sobre ele. Aprenda a separar as coisas, controller, services etc. Ter tudo organizado e separado é importante. Crie padrões de nomeação de arquivos para facilitar na hora que for buscar. Se você usa o Yeoman, ele ajuda a manter tudo organizado.

Use e abuse da injection dependecy que temos no AngularJS; é fantástico. Lembro que quando comecei a estudar AngularJS demorei um pouco para pegar o core de usar injeção de dependência. A dica é: leve o tempo que puder estudando, mas aprenda. Não tenha medo de perguntar e não ache que você sabe tudo;  esse é o maior erro. Pelo contrario: é nesse momento que a brincadeira começa! Todo dia você vai aprender alguma coisa nova.

Conclusão

Hoje usamos fortemente AngularJS em nossos projetos aqui na ITS. Há outros valores na tecnologia do Google, que se fosse entrar nos detalhes o artigo viraria um livro. Por falar nisso, em breve estarei lançando meu próximo livro que será sobre AngularJS, que será nada mais do que aprendi nesse quase um ano em três projetos completamente diferente, os erros que cometi e os acertos que também tive.

Vou ficando por aqui…

Abraços!