O que aprendi com
Play Framework
ObjetivoObjetivo
Compartilhar o Aprendizado com aCompartilhar o Aprendizado com a
tecnologia 'Play Framework' bemtecnologia 'Play Framework' bem
como apresentar um modelo decomo apresentar um modelo de
programação/sistemas reativos paraprogramação/sistemas reativos para
requisitos de alto desempenho erequisitos de alto desempenho e
escalabilidadeescalabilidade
RotaRota
Oque é?Oque é?
Core Play!Core Play!
Synchronous/bloking vs Async/Non-Synchronous/bloking vs Async/Non-
BlockingBlocking
Reactive Systems/ProgrammingReactive Systems/Programming
URL Routing (RESTFul)URL Routing (RESTFul)
Shere-Nothing(Stateless)Shere-Nothing(Stateless)
Template EngineTemplate Engine
Class ReloadingClass Reloading
TestesTestes
Evolution Data BaseEvolution Data Base
WebSocketsWebSockets
Akka(Modelo de Atores)Akka(Modelo de Atores)
Oque é?Oque é?
“Play é baseado em uma leve,
amigável e stateless arquitetura
Web, possui o consumo de
recursos previsíveis e mínimos de
(CPU, Memoria,Threads) para
aplicações altamente escaláveis” [1]
por que?por que?
mais um framework?mais um framework?
Mudanças nos RequisitosMudanças nos Requisitos
É HORA DE MUDAR
Reactive Systems/ProgrammingReactive Systems/Programming
http://www.reactivemanifesto.org/
Core Play!Core Play!
Os mais Usados Synchronous/Bloking IOOs mais Usados Synchronous/Bloking IO
Async/Non-Blocking IO que estão ganhandoAsync/Non-Blocking IO que estão ganhando
popularidadepopularidade
Bloking vs Non Bloking IOBloking vs Non Bloking IO
Non Bloking IO: Você pede
a pizza, a atendente
anota, desliga e atende o
próximo cliente, quando a
pizza estiver pronta ela é
entregue para você
Bloking IO: Você pede a
pizza, a atendente vai
ficar com você até quando
a pizza estiver pronta
NIO BenefíciosNIO Benefícios
• Consomem recursos somente quando
estiverem ativos
• Menor sobrecarga do sistema
• Suporta vários conexões concorrentes
• WebSockets
• Comet
• Server-Send Events
Qualidade com AgilidadeQualidade com Agilidade
• KISS (Keep It Simple, Stupid)
• CoC (Convension Over Configuration)
• DRY (Dont Repeat Youself)
• YAGNI (You Arent Gonna Need It)
• GRASP (General Responsibility Assignment Software Patterns)
• SOLID (Single responsibility, Open-closed, Liskov
substitution, Interfacesegregation and Dependency inversion)
• TDD (Test Driven Development)
• BDD (Behavior Driven Development)
Mão na MassaMão na Massa
URL Routing (RESTFul)URL Routing (RESTFul)
VERB PATH CONTROLLER_METHOD
GET / controllers.Application.index()
GET /foo controllers.Application.foo()
Controllers Share-Nothing(Stateless)
public static Result index() {
return ok(index.render("hello, world"));
}
COMPOSABLE, TYPE-SAFE SCALACOMPOSABLE, TYPE-SAFE SCALA
TEMPLATESTEMPLATES
@(message: String)
@main("Welcome to Play 2.0") {
@message
}
E AGORA REINICIAR O SERVIDOR?E AGORA REINICIAR O SERVIDOR?
Percentual de tempo de codificação
separado para o redeploying
Waiting[2]
TestesTestes
● Controllers
● Templates
● Routes
● Integration Tests
ASSET COMPILERSASSET COMPILERS
●
CoffeeScriptCoffeeScript
●
LESSLESS
●
SASSSASS
●
RequireJSRequireJS
●
JSHintJSHint
●
entre outros...entre outros...
WEBJARSWEBJARS
● Bibliotecas mais usadas no client-side:
jQuery, Bootstrap, etc
● Gerencia a controle de versão através
de gerenciamento de dependência
Evolution Data BaseEvolution Data Base
Controle a versão do seu
Banco
WebSocketsWebSockets
● Introduzido no HTML5
● Define uma full-duplex single socket connection,
através da qual é possível enviar mensagens
entre cliente e servidor
● Simplifica a complexidade em torno da
comunicação web bi-direcional
Akka (Modelo de Atores)Akka (Modelo de Atores)
● Abstrai a programação concorrente
● Mutabilidade isolada
● Imutabilidade Compartilhada
Mas o que é um ator?Mas o que é um ator?
● Modelo criado em 1987 pela
Linguagem Erlang
● Entidades Independentes
● Estado
● Comportamento
● Mailbox
QUEM USA PLAY / SCALA?QUEM USA PLAY / SCALA?
https://typesafe.com/resources/case-studies-and-stories
ConclusãoConclusão
De uma curva de apredizado baixa,
Play! é uma excelente ferramenta para
o desenvolvimento de aplicações web,
principalmente se a cultura ágil é a
marca de sua equipe
ReferenciasReferencias
1.http://presos.jamesward.com/practicing_continuous_delivery/#/4/1
2.http://zeroturnaround.com/rebellabs/java-ee-productivity-report-2011/
3.https://typesafe.com/resources/case-studies-and-stories
DUVIDAS?
OBRIGADO

PlayFramework

Notas do Editor

  • #10 Responsive: O sistema responde em tempo hábil, se possível. Resiliente: O sistema permanece responsivo em face da falha Elastic: O sistema permanece responsivo sob variando carga de trabalho. Sistemas reativos pode reagir a mudanças na taxa de entrada, aumentando ou diminuindo os recursos alocados para atender a esses insumos. Mensagem Driven: sistemas reativos contam com uma passagem de mensagens assíncrona para estabelecer uma fronteira entre os componentes que garante o baixo acoplamento, isolamento, transparência de localização , e fornece os meios para delegar erros como mensagens.
  • #16 Comunicação Non-blocking permite que os destinatários apenas consumam recursos quando estiverem ativos, levando a uma menor sistema sobrecarga.
  • #17 Comunicação Non-blocking permite que os destinatários apenas consumam recursos quando estiverem ativos, levando a uma menor sistema sobrecarga.
  • #20 métodos estáticos são ruins, ele não são testáveis, e assim por diante, mas ele está aqui por uma razão muito importante, um controller é um objeto sem estado, porque o protocole HTTP por si é stateless, você faz uma requisição, você obtêm a resposta... não há relação entre essas conexões
  • #25 Usa http://www.fluentlenium.org/ Uma facilitador para o Selenium