Globalcode – Open4education
Construindo um microserviço JavaEE 100% funcional em 30
minutosRafael Chaves
[email protected] - @abstratt
Globalcode – Open4education
Palestrante
Formação: bacharel (2000) e mestre (2004) em Computação pela UFSC
Passado:
• OTI/IBM Canada: Eclipse (2002-2005), Jazz/Team Concert (2005-2006) • Genologics: Desenvolvedor Senior/Arquiteto (2008-2012)
Recente:
• Desenvolvendo Cloudfier (2012-)• EasyAlpha: serviço de desenvolvimento expresso de MVPs (2016-)
Globalcode – Open4education
Objetivo
Construir um back-end / micro-serviço / “self-contained-system” simples com JavaEE
• API REST usando JAX-RS• Persistência em BD relacional usando JPA• Lógica de negócios em Java/JPA• Testes em JUnit• Bônus: GUI “admin” em Angular
Globalcode – Open4education
A aplicação exemplo: Tarefas do time
1. Tarefas e Colaboradores✔2. Colaboradores podem completar tarefas✔3. Colaboradores podem repassar tarefas✔4. Detalhes (opcionais) na tarefa5. Permitir reabrir tarefa6. Apenas colaborador pode completar tarefa
Globalcode – Open4education
Como?
Usando uma linguagem de mais alto nível que Java (ou Ruby, Python, Scala, Javascript...)
Separando solucão conceitual e arquitetura
Sem escrever nenhuma linha de código Java (ou JavaScript) “no braço”
Implementação JavaEE 100% obtida via tradução automática
Globalcode – Open4education
Por quê?
Abstração mais alta ⇒ melhor compreensão do negócio do cliente
Separação negócio/tecnologia ⇒ reuso, especialização
Automação ⇒ produtividade, custo, qualidade
100% geração ⇒ impacto permanente no desenvolvimento
Globalcode – Open4education
Completando a aplicação exemplo
1. Tarefas e Colaboradores✔2. Colaboradores podem completar tarefas✔3. Colaboradores podem repassar tarefas✔4. Detalhes (opcionais) na tarefa5. Permitir reabrir tarefa6. Apenas colaborador pode completar tarefa
Globalcode – Open4education
Tempo de desenvolvimento vs. tempo de implantação• Nem sempre podemos escolher a plataforma de
implementação• Mas deveríamos ter liberdade sobre a linguagem usada em
tempo de desenvolvimento• A melhor plataforma de implementação hoje não será a
mesma em um ano
Globalcode – Open4education
Em busca de uma linguagem para aplicações de negócios
Que forneça mecanismos que permitam modelar o domínio do problema de forma mais natural
Que permita criar soluções independentes de arquitetura
Que ofereça boa usabilidade para programadores
Globalcode – Open4education
Que linguagem suporta...
• Classes, atributos, operações?• Comportamento imperativo?• Eventos, comunicação por mensagens?• Relacionamentos?• Atributos derivados?• Restrições: pré-condições, invariantes?• Máquinas de estado?
Globalcode – Open4education
Java
• Classes, atributos, operações? ✔• Comportamento imperativo? ✔• Eventos, comunicação por mensagens? ✘• Relacionamentos? ✘• Atributos derivados? ✘• Restrições: pré-condições, invariantes? ✘• Máquinas de estado? ✘
Globalcode – Open4education
UML?!
“Mas UML não é aquela linguagem gráfica que o analista de negócios e a arquiteta vivem insistindo para que a gente use mas que eu sei que é uma grande perda de tempo?!”
- um Programador Pragmático
Globalcode – Open4education
UML
• Classes, atributos, operações ✔• Comportamento imperativo ✔• Eventos, comunicação por mensagens ✔• Relacionamentos ✔• Atributos derivados ✔• Restrições: pré-condições, invariantes ✔• Máquinas de estado ✔
Globalcode – Open4education
UML: uma linguagem superior para aplicações de negócios?
Que forneça mecanismos que permitam modelar o domínio do problema de forma mais natural ✔
Que permita criar soluções independentes de arquitetura ✔
Que ofereça boa usabilidade para programadores ✘
Diagramas são insuficientes para especificar comportamento
Globalcode – Open4education
UML e múltiplas notações
Sintaxe abstrata
Semântica
Sintaxeconcreta A
Sintaxeconcreta B
Sintaxeconcreta C
Sintaxeconcreta Z
...
Globalcode – Open4education
TextUML: sintaxe UML para programadores
Por que textual? Texto é a melhor notação para modelar comportamento (ok para outras áreas)
Mesmo nível de abstração que a notação gráfica (mesma semântica/sintaxe abstrata)
Apenas elementos úteis para construção de software (classes, máquinas de estado, atividades)
Globalcode – Open4education
Gerando a aplicação: entidades
• Entidade -> entidade JPA (elementos de instância)
• Entidade -> serviço JPA (CRUD e elementos de classe)
• Entidade -> resource JAX-RS
• Entidade -> serializador entidade JPA como Map/JSON
Globalcode – Open4education
Cloudfier
• Ambiente de modelagem (Text)UML na web• Prototipação, testes, geração de código
http://github.com/abstratt/cloudfier
http://cloudfier.com
Globalcode – Open4education
Xtend
• Linguagem para JVM• Excelente para implementar geradores de código
https://www.eclipse.org/xtend/
Globalcode – Open4education
kirra-angular
• Biblioteca Javascript standalone• GUI dinâmica para APIs REST
http://github.com/abstratt/kirra-angular
Globalcode – Open4education
Construindo um microserviço JavaEE 100% funcional em 30
minutosRafael Chaves
[email protected] - @abstratt