SlideShare uma empresa Scribd logo
Desacoplando D8 e React
DrupalCamp Campinas
2016
Sebastian Ferrari (a.k.a. Sebas)
sebas@taller.net.br
Desacoplar Drupal ?
Diminuir a
interdependência
entre as camadas
ou entidades de um sistema
Aumentar
interoperabilidade
Contrato de comunicação
transparente entre
diferentes partes do
sistema
GraphQL
Front-end Back-end
Por que
diminuir o
acoplamento?
Regras de negócio
de como acessar as
informações misturadas
com apresentação
Overload
de
complexidade
A soma das partes é maior
do que o resultado final.
Entropia
Alto risco e esforço
perante as mudanças
Drupal 8 e ReactJS -  DrupalCamp Campinas 2016
Alto risco e esforço
perante as mudanças
Drupal 8 e ReactJS -  DrupalCamp Campinas 2016
Drupal 8 e ReactJS -  DrupalCamp Campinas 2016
O que é ágil ?
“It’s not what happens
that counts…
it’s how you react.
Bruce Lee
Front-end gerado
pelo back-end
Alto conhecimento do todo
para realizar uma mudança
Overload
cognitivo
para entender
Side-effects everywhere
De onde vem
esse campo?
Quem está
trocando o texto
desse botão?
Porque não está
funcionando?
Porque está
funcionando?
De onde vem esse
estilo/css?
Como troco a
mensagem de
validação do
campo?
Software
monolítico
Drupal 8 e ReactJS -  DrupalCamp Campinas 2016
Maneiras de desacoplar
TOTALMENTE
★ Web App separada.
★ Drupal Head-less.
★ Comunicação entre
as partes puramente
via APIs.
PARCIAL
★ Web App é um
Theme / Tema.
★ Entrega do HTML
final e sistema de
rotas do Drupal.
PROGRESSIVO
★ Alguns componentes
são puramente feitos
em JS + Drupal
behaviors.
★ Entrega do HTML
final e sistema de
rotas do Drupal.
Não tem
fórmula mágica
Maneira => parcial
Por que ?
Quase separação
completa
Desacoplar por
completo
aumenta o risco
Queremos inovar
com menor risco
Podemos usar o Drupal
onde melhor se encaixa
● Sistema de rotas.
● Login / Sessão / Usuários.
● Sistema de permissões.
● RESTful API.
● Gerenciador de conteúdo.
Time de devs preparados
para o desafio
Drupaleiros que
adoram Javascript
JS
Não precisamos de
server rendering
Como
estamos
fazendo ?
Tratamos rotas da Web App
como exceção utilizando
um prefixo ou subdomínio
mymodule_core.routes.yml
/app => Home
/app/* => Páginas filhas
Módulos contrib
podem criar rotas,
regras de acesso,
assets ou
arquivos privados
Login no admin
do Drupal
Páginas de 404 ou 403
são tratadas pelo Drupal
Rotas do Drupal se
comportam diferente do
Symfony
Symfony
Drupal
Drupal
mymodule.services.yml
http://bit.ly/292xoAu
Web App = Theme / Tema
/app/* = webapp.theme
Serviço: theme_negotiator
Drupal 8 e ReactJS -  DrupalCamp Campinas 2016
Login e sessão do usuário é
responsabilidade do
Drupal usando Cookie
Drupal 8
tem tudo em REST
fora da caixa
certo?
Login, não.
Tentamos usar
o formulário de login
mas carece de respostas
semânticas de HTTP
Redirects depois de
realizar o login com
sucesso para
/user
Achamos um issue
com patch!
drupal.org/node/2403307
Drupal 8 e ReactJS -  DrupalCamp Campinas 2016
Stack
Front-end Back-end
React
V do MVC
Por que
React ?
Programação
funcional e reativa
λ
Drupal 8 e ReactJS -  DrupalCamp Campinas 2016
Virtual DOM
<a href=”#”>link</a>
safaribooksonline.com
Diminui:
repaint & reflows
Simples e declarativo
que aumenta o
entendimento do
código
Familiar vs. Legibilidade
pessoas novas no time podem
entender o que o código faz
Renderização
no servidor
melhora SEO e UX
Componente representa
uma função que recebe
argumentos
e retorna o virtual dom
render()
State less
components
Drupal 8 e ReactJS -  DrupalCamp Campinas 2016
Ecossistema
induz
programação
funcional
Comunidade que
cresce rapidamente e
altamente inovadora
Eventos sintéticos
implementando
Event Delegation
React Native
ElectronApp
+ Enzyme
Drupal 8 e ReactJS -  DrupalCamp Campinas 2016
Drupal 8 e ReactJS -  DrupalCamp Campinas 2016
Drupal 8 e ReactJS -  DrupalCamp Campinas 2016
Drupal 8 e ReactJS -  DrupalCamp Campinas 2016
Drupal 8 e ReactJS -  DrupalCamp Campinas 2016
github.com/choko-org/redux-boot
Drupal 8 e ReactJS -  DrupalCamp Campinas 2016
Drupal 8 e ReactJS -  DrupalCamp Campinas 2016
CSS
Modules
Drupal 8 e ReactJS -  DrupalCamp Campinas 2016
Webpack
+
ES6 com plus!!
/webapp/dist/bundle.js
Não é a melhor
solução para todos
os problemas !
Work in Progress
Drupal 8 rocks!
★ Arquitetura menos acoplada.
★ Services API, não precisamos de hooks!
★ Entities API simples, realmente.
★ Testes unitários e E2E headless.
★ Composer PHP. o/
★ Drupal Console.
Trabalho em equipe!
Perguntas ?
Sebastian Ferrari
sebas5384

Mais conteúdo relacionado

PPTX
Programação Eficaz - Agile Trends Floripa 2016
PPTX
Arquitetura de referência Drupal 7 e 8. Da Natura e Taller para a comunidade ...
PPTX
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
PPTX
Como a Natura vem diminuindo seu custo de operação total com Drupal - DrupalC...
PPTX
ASP.NET Web Forms X ASP.NET MVC
PDF
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
PPTX
Introdução ao desenvolvimento front end usando bootstrap e angular js
PPT
XPT Framework
Programação Eficaz - Agile Trends Floripa 2016
Arquitetura de referência Drupal 7 e 8. Da Natura e Taller para a comunidade ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Como a Natura vem diminuindo seu custo de operação total com Drupal - DrupalC...
ASP.NET Web Forms X ASP.NET MVC
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
Introdução ao desenvolvimento front end usando bootstrap e angular js
XPT Framework

Mais procurados (20)

PDF
Clean Architecture
PPTX
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
PDF
Apresentação sobre Drupal
PDF
Introdução ao LiveOak
PPTX
Introdução ao desenvolvimento de aplicações web
PDF
AngularJS - Just Digital
PDF
Estrutura de um Front-End eficiente (para iniciantes)
PDF
Java Web Fácil com VRaptor
PPTX
React Native - Plataformas Mobile
PDF
Além do MVP com PHP - TDC Floripa 2016
PPTX
Desenvolviemento web com ASP.Net e MVC
PDF
Além do MVP com PHP - TDC POA 2015
PDF
React - Introdução
PPTX
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
PDF
React - Biblioteca Javascript para criação de UI
PPTX
ASP .NET MVC - Você esta pronto para a pílula vermelha?
PDF
Guia do Front-end das Galáxias
PDF
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
PPT
Desvendando ASP.NET MVC
PDF
ANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDA
Clean Architecture
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Apresentação sobre Drupal
Introdução ao LiveOak
Introdução ao desenvolvimento de aplicações web
AngularJS - Just Digital
Estrutura de um Front-End eficiente (para iniciantes)
Java Web Fácil com VRaptor
React Native - Plataformas Mobile
Além do MVP com PHP - TDC Floripa 2016
Desenvolviemento web com ASP.Net e MVC
Além do MVP com PHP - TDC POA 2015
React - Introdução
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
React - Biblioteca Javascript para criação de UI
ASP .NET MVC - Você esta pronto para a pílula vermelha?
Guia do Front-end das Galáxias
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
Desvendando ASP.NET MVC
ANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDA
Anúncio

Destaque (14)

PDF
Taller talk - Site/blog 2.0
PPTX
Superando o GitFlow - DrupalCamp Campinas 2016
PPTX
A arte do começo- DrupalCamp Campinas 2016
PPTX
11 maneiras de compartilhar conhecimento - Agile Trends 2016
PPTX
Núcleo de Criação - Agilidade Além da TI
PPTX
Case Campanha de Vacinação FIESC/SESI SC
PPTX
A importância da Transparência na cultura ágil
PDF
Trabalhando a cultura do feedback. Por onde começar?
PPTX
Kanban no fluxo único de portfolio de projetos
PPTX
A importância da transparência na cultura ágil - 2º Agile Floripa
PDF
Kanban no Fluxo Unificado de Portfolio de Projetos - Agile Brazil 2016
PPTX
Implementando o Desenvolvimento Lean de Software - Do conceito ao dinheiro
PPTX
Kanban no Fluxo Único - sessão Show me your board, Agile Trends 2016
PDF
Taller talk - Site/blog 2.0
Superando o GitFlow - DrupalCamp Campinas 2016
A arte do começo- DrupalCamp Campinas 2016
11 maneiras de compartilhar conhecimento - Agile Trends 2016
Núcleo de Criação - Agilidade Além da TI
Case Campanha de Vacinação FIESC/SESI SC
A importância da Transparência na cultura ágil
Trabalhando a cultura do feedback. Por onde começar?
Kanban no fluxo único de portfolio de projetos
A importância da transparência na cultura ágil - 2º Agile Floripa
Kanban no Fluxo Unificado de Portfolio de Projetos - Agile Brazil 2016
Implementando o Desenvolvimento Lean de Software - Do conceito ao dinheiro
Kanban no Fluxo Único - sessão Show me your board, Agile Trends 2016
Anúncio

Semelhante a Drupal 8 e ReactJS - DrupalCamp Campinas 2016 (20)

PPTX
Treinamento ASP.NET 2014
PPT
Arquitetura de sistemas web
PPS
Lampada Php Conference Brasil 2007 Palestra
KEY
Django - Desenvolvimento web ágil com Python
PDF
Workshop Ruby on Rails dia 2 ruby-pt
PDF
Desenvolvimento web ágil com python e web2py
PPT
Joomla Day Brasil 2010: Customizações para grandes portais
PPTX
Treinamento Básico Sobre ASP.NET MVC
PPTX
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
PDF
Workshop soa, microservices e devops
PDF
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
PDF
Desenvolvimento Client-Side 2016
PPT
Programação Web com Zend Framework e Ajax com Dojo
PDF
Colóquio Drupal na Universidade do Minho
PDF
Java no Google App Engine - TDC2011
PDF
Clean architecture frontend
PPT
Aula1
PDF
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
PPT
Design Patterns
PDF
Palestra - Symfony Framework MVC PHP 5
Treinamento ASP.NET 2014
Arquitetura de sistemas web
Lampada Php Conference Brasil 2007 Palestra
Django - Desenvolvimento web ágil com Python
Workshop Ruby on Rails dia 2 ruby-pt
Desenvolvimento web ágil com python e web2py
Joomla Day Brasil 2010: Customizações para grandes portais
Treinamento Básico Sobre ASP.NET MVC
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
Workshop soa, microservices e devops
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
Desenvolvimento Client-Side 2016
Programação Web com Zend Framework e Ajax com Dojo
Colóquio Drupal na Universidade do Minho
Java no Google App Engine - TDC2011
Clean architecture frontend
Aula1
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Design Patterns
Palestra - Symfony Framework MVC PHP 5

Mais de Taller Negócio Digitais (18)

PPTX
Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
PPTX
Discovery kanban
PDF
Taller Negócios Digitais
PDF
De um sistema legado para micro serviços com GraphQL
PDF
Next.js with drupal, the good parts
PPTX
Gestão Ágil com Fluxo Unificado
PDF
Alinhando Discovery com Delivery usando Upstream Kanban
PDF
Lições Aprendidas com Fluxo Unificado
PDF
Como a liderança descentralizada tornou a Taller mais efetiva
PDF
Métricas no Fluxo Unificado
PDF
Práticas e ferramentas de feedback: potencializando a cultura da confiança
PDF
Como preparar seu time para receber feedback - Scrum Gathering Rio 2017
PDF
Vacinando mais de 200 mil pessoas com ReactJS e GraphQL
PDF
Taller – Treinamentos e consultorias
PDF
Taller - Ateliê de desenvolvimento de software
PDF
Introdução ao Fluxo Unificado - TDC Florianópolis 2017
PDF
Javascript Funcional - TDC Florianópolis 2017
PDF
11 maneiras de compartilhar conhecimento - TDC Florianópolis 2017
Indo além do técnico para desenvolver sistemas que evoluem na velocidade do...
Discovery kanban
Taller Negócios Digitais
De um sistema legado para micro serviços com GraphQL
Next.js with drupal, the good parts
Gestão Ágil com Fluxo Unificado
Alinhando Discovery com Delivery usando Upstream Kanban
Lições Aprendidas com Fluxo Unificado
Como a liderança descentralizada tornou a Taller mais efetiva
Métricas no Fluxo Unificado
Práticas e ferramentas de feedback: potencializando a cultura da confiança
Como preparar seu time para receber feedback - Scrum Gathering Rio 2017
Vacinando mais de 200 mil pessoas com ReactJS e GraphQL
Taller – Treinamentos e consultorias
Taller - Ateliê de desenvolvimento de software
Introdução ao Fluxo Unificado - TDC Florianópolis 2017
Javascript Funcional - TDC Florianópolis 2017
11 maneiras de compartilhar conhecimento - TDC Florianópolis 2017

Drupal 8 e ReactJS - DrupalCamp Campinas 2016

Notas do Editor

  • #87: - Jest e Enzyme para os testes: - Jest feito pelo Facebook - Facilita o teste unitário dos componentes. (exemplo de teste) http://codeheaven.io/testing-react-components-with-enzyme/ - Mock everything!!! - Testes assíncronos. - Utiliza Jasmine que é bem conhecido pela comunidade. - Pode ser utilizado com vários expects como chai ou mocha. - Enzyme feito pelo AirBnB - Exemplo de código antes e depois. http://codeheaven.io/testing-react-components-with-enzyme/ - Conceito de shallow que permite testar o primeiro nível do componente. - Renderização do DOM sem precisar de browser permitindo a simulação de eventos como click ou change. - Seletores para procurar elementos/componentes dentro de um componente. - API super fácil por exemplo para acessar propriedades e o estado do componente.
  • #88: - Jest e Enzyme para os testes: - Jest feito pelo Facebook - Facilita o teste unitário dos componentes. (exemplo de teste) http://codeheaven.io/testing-react-components-with-enzyme/ - Mock everything!!! - Testes assíncronos. - Utiliza Jasmine que é bem conhecido pela comunidade. - Pode ser utilizado com vários expects como chai ou mocha. - Enzyme feito pelo AirBnB - Exemplo de código antes e depois. http://codeheaven.io/testing-react-components-with-enzyme/ - Conceito de shallow que permite testar o primeiro nível do componente. - Renderização do DOM sem precisar de browser permitindo a simulação de eventos como click ou change. - Seletores para procurar elementos/componentes dentro de um componente. - API super fácil por exemplo para acessar propriedades e o estado do componente.
  • #94: - React Router como sistema de rotas da WebApp: - Sistema de roteamento reativo e de fácil implementação. - Bem conhecido na comunidade de React, e escolhido como way to go! - Mostrar código de exemplo. - Cada mudança de rota é uma mudança no estado do Redux. - Muda a url sem realizar refresh graças a compatibilidade com html5.
  • #95: - React Router como sistema de rotas da WebApp: - Sistema de roteamento reativo e de fácil implementação. - Bem conhecido na comunidade de React, e escolhido como way to go! - Mostrar código de exemplo. - Cada mudança de rota é uma mudança no estado do Redux. - Muda a url sem realizar refresh graças a compatibilidade com html5.
  • #97: - CSS Modules com PostCSS: - Possibilita interoperabilidade dos componentes, parecido ao BEM. - Extend vs. Compose. - Estilo local por default, não mais regras globais! - Funciona muito bem com Webpack e React. - CSS que escala. - Syntaxe parecida ao Sass.
  • #98: - Webpack como bundler. (exemplo do arquivo de config) - Diferença entre Browserify. - Remove a necessidade de utilizar Gulp ou Grunt. - Remove a necessidade de usar Bower, usamos npm para tudo. - Babel para usar ES6. (exemplo de código) - Podemos usar features que possibilitam uma fácil programação funcional. - Async / Await. - Decorators. - Reduz código verboso - Reduz a necessidade de se preocupar com Polyfills como a API de Promesas. - Quase todo tutorial de React usa Babel em vez de TypeScript.
  • #99: - Webpack como bundler. (exemplo do arquivo de config) - Diferença entre Browserify. - Remove a necessidade de utilizar Gulp ou Grunt. - Remove a necessidade de usar Bower, usamos npm para tudo. - Babel para usar ES6. (exemplo de código) - Podemos usar features que possibilitam uma fácil programação funcional. - Async / Await. - Decorators. - Reduz código verboso - Reduz a necessidade de se preocupar com Polyfills como a API de Promesas. - Quase todo tutorial de React usa Babel em vez de TypeScript.