54
Globalcode – Open4education Construindo um microserviço JavaEE 100% funcional em 30 minutos Rafael Chaves [email protected] - @abstratt

TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos

Embed Size (px)

Citation preview

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

Arquitetura-alvo

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

DEMO 1Aplicação exemplo

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?

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

Python?

Globalcode – Open4education

Ruby?

Globalcode – Open4education

Scala?

Globalcode – Open4education

C#?

Globalcode – Open4education

UML!

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

Para “visão geral”

Texto < Diagramas

Globalcode – Open4education

Para detalhes

Texto > Diagramas

Globalcode – Open4education

Para programadores

Texto > Diagramas

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

Geração de código JavaEE

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

Atributos

Globalcode – Open4education

Atributos em entidades JPA

Globalcode – Open4education

Relacionamentos

Globalcode – Open4education

Relacionamentos em entidades JPA

Globalcode – Open4education

Ações

Globalcode – Open4education

Ações em entidades JPA

Globalcode – Open4education

Ações em resources JAX-RS

Globalcode – Open4education

Consultas

Globalcode – Open4education

Consultas em serviços JPA

Globalcode – Open4education

Consultas em resources JAX-RS

Globalcode – Open4education

Consultas em resources JAX-RS

Globalcode – Open4education

Máquinas de estado

Globalcode – Open4education

Máquinas de estado

Globalcode – Open4education

Máquinas de estado em entidade JPA

Globalcode – Open4education

Permissões

Globalcode – Open4education

Permissões em entidade JPA

Globalcode – Open4education

Permissões em resource JAX-RS

Globalcode – Open4education

Casos de teste

Globalcode – Open4education

Casos de teste em JUnit

Globalcode – Open4education

Bônus: documentação para analistas de negócio

Globalcode – Open4education

Bônus: documentação para analistas de negócio

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