Apresentação - Portal Software Livre

Propaganda
Novas arquiteturas
Para aplicações corporativas
(baseadas em software livre)
www.obomprogramador.com: 1 / 54
Cleuton
Sampaio
Cleuton
Sampaio
$ whoami
●
[email protected]
●
http://www.obomprogramador.com
www.obomprogramador.com: 2 / 54
Cleuton Sampaio
A realidade mudou...
● Ubiquidade da informação...
● Variedade de plataformas...
● Velocidade da evolução
tecnológica...
●
E continuamos a desenvolver aplicações,
usando tecnologias da década passada...
Estamos acorrentados a uma árvore de
frameworks, que funcionam como
“âncoras”, limitando nossa agilidade em
produzir novas aplicações, e gerando
constantemente mais legado!
www.obomprogramador.com: 3 / 54
Cleuton Sampaio
Tudo aqui é Open Source
●
Java e Java EE: OpenJDK, Jetty e Tomcat;
●
Derby;
●
MongoDB;
●
Express.js;
●
Angular.js;
●
Node.js.
www.obomprogramador.com: 4 / 54
Cleuton Sampaio
Um desafio
●
●
●
Pegue uma aplicação Java EE típica, feita há
dois anos;
Tente atualizá-la para a nova versão dos
componentes...
Agora, pegue uma aplicação Struts, feita há
5 anos, e tente fazer o mesmo...
Aplicações Java EE envelhecem rapidamente!
www.obomprogramador.com: 5 / 54
Cleuton Sampaio
Por que?
●
●
●
●
O ecossistema é feito para que você se
concentre em Java;
Os frameworks absorvem e abstraem as
tecnologias de base;
Os frameworks e suas APIs evoluem
constantemente;
O upgrade tecnológico implica em
retrabalho.
www.obomprogramador.com: 6 / 54
Cleuton Sampaio
Exemplos...
●
●
●
JSF 1.x para 2.x: Facelets e XHTML ao invés
de JSP;
Hibernate: Anotações JPA ao invés de
arquivos de configuração;
Novas interfaces, novos métodos,
mudanças de assinaturas conhecidas etc;
www.obomprogramador.com: 7 / 54
Cleuton Sampaio
Acoplamento de plataforma
●
●
●
Nosso código fica acoplado à plataforma
Java EE na qual foi desenvolvido;
Padrões são “assimilados”;
Interoperabilidade, só com a mesma
plataforma;
www.obomprogramador.com: 8 / 54
Cleuton Sampaio
Problemas?
●
●
●
Tente usar HTML 5 com componentes JSF...
Tente integrar uma aplicação móvel com um
WebService SOAP/XML;
Isso, sem falar em EJB...
www.obomprogramador.com: 9 / 54
Cleuton Sampaio
O que os outros pensam...
●
Technology Radar, de Janeiro de 2014,
editado pela ThoughtWorks
"Nós continuamos a ver as equipes enfrentarem problemas usando JSF
- JavaServer Faces - e estamos recomendando evitar esta tecnologia.
As equipes parecem escolher JSF, porque é um padrão J2EE, sem
realmente avaliar se o modelo de programação lhes convém. Achamos
que JSF é falho porque tenta abstrair HTML, CSS e HTTP, exatamente o
inverso do que os frameworks web modernos fazem. JSF (assim como os
webforms, do ASP.NET) tenta criar manutenção de estado em cima do
protocolo HTTP, que é inerentemente "stateless", e acaba causando uma
série de problemas envolvendo estado do lado do servidor compartilhado.
Estamos conscientes das melhorias no JSF 2.0, mas acho que o modelo é
fundamentalmente quebrado. Recomendamos às equipes usarem
frameworks simples e abraçarem e compreenderem as tecnologias
web, incluindo HTTP, HTML e CSS."
www.obomprogramador.com: 10 / 54
Cleuton Sampaio
O que os outros usam...
●
HotFrameworks, Fevereiro de 2014
1)ASP.NET;
2)Ruby on Rails;
3)ASP.NET MVC;
4)Django;
5)AngularJS;
E o JSF vem em décimo quinto lugar.
www.obomprogramador.com: 11 / 54
Cleuton Sampaio
SOAP/XML vs REST/JSON
●
ProgrammableWeb
www.obomprogramador.com: 12 / 54
Cleuton Sampaio
Bancos de dados NoSQL
●
Martin fowler
"The rise of NoSQL databases marks the end of the era of relational
database dominance.
But NoSQL databases will not become the new dominators. Relational
will still be popular, and used in the majority of situations. They, however,
will no longer be the automatic choice.
The era of Polyglot Persistence has begun"
www.obomprogramador.com: 13 / 54
Cleuton Sampaio
MongoDB
●
Technology Radar Janeiro 2014
Ao invés de mapear seus documentos artificialmente, usando
modelagem O/R em Java, use um banco de dados NoSQL como o
MongoDB.
www.obomprogramador.com: 14 / 54
Cleuton Sampaio
O peso do ecossistema Java
●
Container: Soluções que você não precisa,
para problemas que você não tem!
–
–
–
–
As aplicações modernas são simples, com
interface Web, e acesso via Ajax;
Não precisamos de EJB, JSF e JPA;
Não precisamos trafegar uma “árvore de
componentes”;
Não precisamos de uma camada de
apresentação no Servidor!
www.obomprogramador.com: 15 / 54
Cleuton Sampaio
frameworksareevil.com
●
Frameworks monolíticos, como o Java EE,
servem para criar castelos
–
–
–
–
São complexos
São monolíticos
São pesados
São desnecessários
www.obomprogramador.com: 16 / 54
Cleuton Sampaio
A arquitetura moderna
●
O que vamos usar deve ser:
–
–
–
–
Simples;
Distribuído;
Leve;
Só o indispensável;
Arquitetura diluída, risco diluído
JSON
Redis
Express
Node.js
REST
MongoDB
Angular
www.obomprogramador.com: 17 / 54
Cleuton Sampaio
Por que?
●
Simplicidade é menor custo;
●
Distribuir a responsabilidade reduz o risco;
●
Leveza aumenta a performance;
●
Racionalizar aumenta o ROI!
www.obomprogramador.com: 18 / 54
Cleuton Sampaio
Métodos ágeis e arquitetura
lerda?
Pode um ecossistema de alta complexidade
acidental ser utilizado com: Scrum, Kanban e Poker
Planning?
www.obomprogramador.com: 19 / 54
Cleuton Sampaio
Não acredita?
www.obomprogramador.com: 20 / 54
Cleuton Sampaio
Vamos provar!
●
Microblog
www.obomprogramador.com: 21 / 54
Cleuton Sampaio
Descrição do exemplo
●
Aplicação Java EE Microblog
–
–
–
–
Feita há uns 2 anos;
Java EE com JSF 1.2 – Facelets;
Templates em XHTML;
JPA com Hibernate, usando Derby;
Vamos dar uma olhada na workspace
eclipse
www.obomprogramador.com: 22 / 54
Cleuton Sampaio
Arquitetura
XHTML
XHTML
Apresentação
Apresentação
Javaserver Faces
Faces
Javaserver
Servidor
Servidor
Facelets
Facelets
Expr. Language
Language
Expr.
Manag. Bean
Bean
Manag.
Lógica de
de negócios
negócios (Servidor)
(Servidor)
Lógica
Business Object
Object
Business
Modelo (Cross layer)
Cliente
Cliente
Componentes JSF
JSF
Templates Facelets
Facelets Componentes
Templates
Persistência (Servidor)
(Servidor)
Persistência
JPA /Hibernate
/Hibernate
JPA
Derby
Derby
www.obomprogramador.com: 23 / 54
DAO
DAO
Cleuton Sampaio
Problemas?
●
Só para começar, temos que
conhecer 7 “idiomas”
–
–
–
–
Javaserver Faces;
Facelets;
Expression language;
XHTML;
–
Componentes JSF;
Java/JavaEE
–
JPA/Hibernate
–
www.obomprogramador.com: 24 / 54
Tudo concentrado em um só
“stack” de frameworks: O
ecossistema Java EE!
Cleuton Sampaio
Problemas?
●
●
Ficam desatualizados rapidamente;
“Encapsulam” as teconogias de
base;
●
Diminuem a flexibilidade;
●
Aumentam a curva de aprendizado;
●
Implicam em acoplamento de
plataforma;
www.obomprogramador.com: 25 / 54
Cleuton Sampaio
Rápida desatualização
●
Javaserver Faces está na versão 2.2;
●
Facelets foram incorporados ao JSF;
●
JPA já está na versão 2.1;
●
Bibliotecas de componentes foram
atualizadas;
Atualização da aplicação é sempre complexa...
www.obomprogramador.com: 26 / 54
Cleuton Sampaio
Encapsulamento malígno
●
A ideia de “tudo em Java” cria problemas de
interoperabilidade;
●
SQL encapsulado;
●
HTML, Javascript e CSS encapsulados;
www.obomprogramador.com: 27 / 54
Cleuton Sampaio
Solução inflexível
●
●
Não se integra facilmente com outros
stacks;
Não admite facilmente inovações, como:
HTML 5, NoSQL etc;
www.obomprogramador.com: 28 / 54
Cleuton Sampaio
Grande curva de aprendizado
●
●
●
●
Web designers não conseguem produzir
diretamente;
Web developers (PHP, RoR etc) não
conseguem colaborar;
Formar um desenvolvedor Java EE pode
demorar muito tempo;
É necessário adquirir a “cultura” Java e
Java EE.
www.obomprogramador.com: 29 / 54
Cleuton Sampaio
Acoplamento de plataforma
●
●
Evolução? Só se for em Java e Java EE;
O custo de upgrade é alto, mesmo se
insistirmos no Java EE;
O principal argumento em favor do Java EE é que, com o
passar do tempo, a produtividade dos desenvolvedores
aumenta, pois se concentram em uma única tecnologia.
www.obomprogramador.com: 30 / 54
Cleuton Sampaio
Admirável mundo novo...
●
Rápida evolução tecnológica;
●
Alta competitividade;
●
Ubiquidade da informação!
www.obomprogramador.com: 31 / 54
Cleuton Sampaio
Precisamos de aplicações
●
Simples;
●
Modulares;
●
Interoperáveis;
●
Desacopladas;
●
De menor risco, custo e prazo;
●
De rápida construção;
●
De baixo investimento;
●
De baixo comprometimento.
www.obomprogramador.com: 32 / 54
Cleuton Sampaio
Solução 1
●
Diminuir a concentração no Java EE e no
Container
–
–
–
–
–
Vamos “diluir” a aplicação, mantendo Java EE;
Vamos usar HTML 5, REST e JSON;
Vamos usar um banco NoSQL;
Vamos usar um RESTful web service com
Jersey, em um container embutido;
Vamos mover a sessão para o Banco de Dados.
www.obomprogramador.com: 33 / 54
Cleuton Sampaio
Vantagens
●
●
●
●
●
Preservamos nosso investimento em Java e
Java EE;
Criamos uma aplicação mais modular;
Menor concentração no Java EE e no
Container;
Mas interoperável;
Mais simples, aproveitando o conhecimento
dos outros;
www.obomprogramador.com: 34 / 54
Cleuton Sampaio
Arquitetura
HTML 55
HTML
Javascript
Javascript
CSS
CSS
Apresentação
Apresentação
HTML 55
HTML
REST
REST
Lógica de
de negócios
negócios (Servidor)
(Servidor)
Lógica
Jetty
RESTful WS
WS stateless
stateless
RESTful
JSON
Cliente
Cliente
jQuery
jQuery
Persistência (Servidor)
(Servidor)
Persistência
MongoDB
MongoDB
O estado fica
no banco!
www.obomprogramador.com: 35 / 54
Cleuton Sampaio
Olha, mãe, sem container!
A página HTML fala diretamente com o RESTful Webservice
www.obomprogramador.com: 36 / 54
Cleuton Sampaio
Solução 2: Limar o Java EE!
●
●
●
Será que essa solução é mesmo
desacoplada?
Queria tirar o Java EE, mas manter o nosso
DAO em Java, pois está funcionando bem;
Vamos substituir o RESTful Web Service e o
Java EE!
www.obomprogramador.com: 37 / 54
Cleuton Sampaio
Vamos substituir partes!
HTML 55
HTML
Javascript
Javascript
CSS
CSS
Apresentação
Apresentação
REST
REST
Lógica de
de negócios
negócios (Servidor)
(Servidor)
Lógica
Jetty
RESTful WS
WS
RESTful
JSON
HTML 55
HTML
Cliente
Cliente
jQuery
jQuery
Persistência (Servidor)
(Servidor)
Persistência
MongoDB
MongoDB
Olha, mamãe, sem Java EE!
www.obomprogramador.com: 38 / 54
Java
Cleuton Sampaio
Node.js
●
Uma aplicação C++ que usa o engine V8;
●
Uma camada de componentes servidores;
●
Cria apps servidoras só com Javascript!
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
No container, no cry!
www.obomprogramador.com: 39 / 54
Cleuton Sampaio
Arquitetura do Node.js
●
●
●
●
Um loop de eventos
monothread;
Menor “footprint”;
Performance absurda;
1 Servidor = milhares de
requests!
www.obomprogramador.com: 40 / 54
Cleuton Sampaio
É javascript, caramba!
●
Todo mundo conhece Javascript!
●
Uma ou outra API a mais...
●
●
Tem plugin para IDEs, com depuração
gráfica!
Baixíssima curva de aprendizado;
www.obomprogramador.com: 41 / 54
Cleuton Sampaio
Limando o Java EE!
HTML 55
HTML
Javascript
Javascript
CSS
CSS
Apresentação
Apresentação
HTML 55
HTML
REST
REST
Lógica de
de negócios
negócios (Node.js)
(Node.js)
Lógica
Javascript!
Java!
RESTful WS
WS stateless
stateless
RESTful
JSON
Cliente
Cliente
jQuery
jQuery
Persistência (Java)
(Java)
Persistência
MongoDB
MongoDB
O estado fica
no banco!
www.obomprogramador.com: 42 / 54
Cleuton Sampaio
Agora, sem Java EE!
A página HTML 5 fala diretamente com a aplicação
Node.js, usando REST e JSON, mas usamos o mesmo
DAO feito em Java
www.obomprogramador.com: 43 / 54
Cleuton Sampaio
Mas, o que conseguimos?
●
Uma aplicação desacoplada;
●
Interoperável;
●
Simples;
●
Baixo custo;
●
Baixo comprometimento;
www.obomprogramador.com: 44 / 54
Cleuton Sampaio
Qual é a direção dos ventos?
●
M.E.A.N. stack
–
–
–
–
MongoDB;
Express.js;
Angular.js;
Node.js.
www.obomprogramador.com: 45 / 54
Cleuton Sampaio
De que se trata?
●
●
●
●
M: MongoDB - Banco "no-SQL", que trabalha diretamente
com objetos BSON / JSON, alta performance com grande
volume de dados;
E: Express.js - Um framework para criação de aplicações
cliente-servidor, baseadas em Javascript e Node.js, que usem
REST como API;
A: Angular.js - É um framework MVC para uso em páginas
HTML, feito pela Google. Cria páginas HTML 5 dinâmicas,
usando “Two-way data binding”;
N: Node.js – Usa o Javascript V8, do Chrome, para criar
aplicações servidoras, baseadas em "no blocking I/O", que
respondem muito bem ao alto tráfego e grande volume de
dados.
www.obomprogramador.com: 46 / 54
Cleuton Sampaio
Express.js
●
Organiza sua aplicação:
/projeto
......../node_modules
......../public
.............../images
.............../javascripts
.............../stylesheets
......./routes
......./views
.......app.js
Rota 1
Template
Request
Rota 2
Rota n
Template
engine
MongoDB
Response
www.obomprogramador.com: 47 / 54
Cleuton Sampaio
Angular.js
●
●
Manipulação da página sem lidar com DOM;
Two-way data binding – atualização
dinâmica;
View
Controller
Model
Web
www.obomprogramador.com: 48 / 54
Cleuton Sampaio
Uma demonstração
www.obomprogramador.com: 49 / 54
Cleuton Sampaio
Inserimos um novo link
www.obomprogramador.com: 50 / 54
Cleuton Sampaio
Isso responde às críticas!
●
Pra quê criar servidores: Não precisamos,
pois temos o Express.js, o Restify.js etc;
●
Node.js é desorganizado: Express.js;
●
MongoDB não tem esquema: Mongoose;
●
Lidar com DOM é complicado: Angular.js e
Jade;
www.obomprogramador.com: 51 / 54
Cleuton Sampaio
Por que mudar?
●
Tudo está mudando, até mesmo o Java EE;
●
Temos que evitar o Golden Hammer;
●
Vamos parar de construir castelos;
●
Precisamos baixar: custo, risco e prazo...
●
…investindo esse capital em coisas mais
úteis!
Com ferramentas e padrões abertos!
www.obomprogramador.com: 52 / 54
Cleuton Sampaio
“Always in motion is the future.”
YODA, Star Wars Episode V: The Empire Strikes Back
www.obomprogramador.com: 53 / 54
Cleuton Sampaio
Onde obter informações
●
http://www.obomprogramador.com
–
●
“/search/label/arquitetura%20diluída”
http://www.obomprogramador.com
–
“/search/label/mean%20development”
www.obomprogramador.com: 54 / 54
Cleuton Sampaio
Download