Workshop: Front End Architecture e Tecnologias de Front End
@salerno_rafael
github.com/salerno-rafael
Conteúdo
Agenda
❖ SOA
❖ Tipos de Arquiteturas de Web App
❖ SOFEA
❖ Sigle Page Application
❖ Backends for Frontends Pattern - BFF
❖ Angular
❖ Angular Testes
❖ Angular Mock
❖ NodeJs
❖ NodeJs + Angular
❖ NodeJs Teste
❖ Gulp
❖ Grunt
❖ Grunt vs Gulp
❖ Bower
❖ JQuery
❖ Boostrap
❖ Boostrap + NodeJs + Angular
❖ Browserify
❖ React
❖ Web components
❖ Isomorphic JavaScript
❖ Open Components
❖ FastFlux
❖ GraphQL
❖ Redux
❖ Relay
Relembrado SOA
Interoperabilidade
Intrínseca
Se os programas de
software não são
projetados para serem
compatíveis, eles
provavelmente não
serão interoperáveisFlexibilidade
a característica de
flexibilidade vai além da
capacidade dos serviços
para efetivamente
compartilhar dados. Os
serviços devem ser
flexíveis e podem ser
combinados e
agregados em soluções
compostas.
Refinamento evolucionário
Evoluir aos poucos não precisa
chegar na perfeição na versão 1
Serviços
compartilhados
Objetivos estratégicos
priorizar a realização de longo
prazo e os objetivos estratégicos
de negócios
Valor de Negócio
Não se trata de
tecnologia de
determinar a direção da
empresa, trata-se da
visão de negócios
ditando a utilização da
tecnologia.
Soa Manifesto
Separação de Conceitos
Poucas dependências
Devem mudar mas atendendo o prometido
Por que lembrado de SOA ???
Problema
Por que não fazer o mesmo na UI ???
Como podemos mudar ?
Estudar o passado para mudar o futuro
Como é Hoje?? Tipos de Arquiteturas de Web App tinhamos?
Tipos de Arquiteturas de Web App Utilizadas
❏ Web Templating Engines
❏ MVC Frameworks
Web Templating Engines
❏ Código do framework (embedded) dentro de elementos státicos do
HTML
❏ Mix de estático e HTML dinâmico
❏ Exemplos de templates Engines:
❏ Java Server Pages
❏ PHP
❏ Active Server Pages
Web Templating Engines
MVC Frameworks
❏ Model View Controller pattern
❏ Server side framework
❏ Exemplos :
❏ ASP.NET MVC Framework (.Net)
❏ Struts, Spring MVC (Java)
❏ Ruby on Rails (Ruby)
❏ Django (Python)
❏ Grails (Groovy)
MVC Frameworks
AJAX
❏ Asynchronous JavaScript And XML
❏ Alterações de conteúdo dinâmico sem recarregar a página inteira
❏ Permite que as páginas da web para ser atualizado de forma
assíncrona através da troca de pequenas quantidades de dados com
o servidor em background
AJAX
MVC = Web Templating Engines
Processo das Web Applications
JSP/JSF/PHP/etc..
Processo das Web Applications
1. Application Download (Download da Aplicação)
a. (JavaScript, HTML, Applets, Flash)
código fica em constante download para o cliente (web browser)
2. Presentation Flow (Fluxo de Apresentação)
a. Renderização dinâmica visual da interface do usuário
(tela muda, novo telas, etc)
b. Response à cada input do usuário e estado dos dados são
alteradas
3. Data Interchange ( Troca de Dados)
a. Troca de dados entre dois componentes de software e duas
camadas
b. search, updates, retrieval, etc
Characteristicas da Web Templating Engines e MVC Frameworks
❏ Acoplamento forte entre o Presentation flow e Data interchange
❏ Inicio de um Presentation Flow em uma aplicação web sempre
inicia uma Operação de troca de dados
❏ A cada operação de Troca de dados (Data Interchange) chamada
resulta em uma operação do Presentation Flow
❏ Pesentation flow e Data interchange de dados são preocupações que
geralmente estão associados
Onde queremos chegar
Por que não posso usar simplesmente os novos Frameworks ????
❏ Propõe remover toda a lógica da camada de
apresentação do servidor para colocar a lógica no
JavaScript no lado do cliente
❏ Um estilo de arquitetura para aplicações web em
ambientes SOA & Cloud
SOFEA
❏ Sinônimo de “Single Page Applications”
❏ Como construir aplicações Front-ends em um ambiente Service-Oriented
❏ É Architectural Style – não uma implementação
❏ Tem o propósito de trazer a revolução de SOA no back-end para o Front-End
SPA
Single Page Applications
❏ Por que subutilizar o lado do cliente enquanto sobrecarregamos o lado do
servidor?
❏ Por que não equilibrar melhor esta carga?
❏ Melhorar a experiência ao usuário da aplicação por meio de maior ênfase
nas técnicas de front-end development.
❏ Escrever menos código server-side e mais código client-side
❏ Organizar da melhor maneira possível este código JavaScript
Single Page Applications
Por que somente agora SOFEA?
❏ Redução da complexidade para a criação de web apps
❏ Evolução do browsers(JavaScript browser engines, AJAX toolkits)
❏ Evolução do frameworks client-side
❏ Simplicidade no cliente
❏ Heterogeneidade da equipe
❏ Maturidade de SOA e de Cloud
❏ Clientes mobile crescem dominantemente
Lembram dos processo web???
Princípios do SOFEA
❏ Download da Aplicação,Troca de Dados, e Fluxo de Apresentação devem
estar desacoplados
❏ Fluxo de Apresentação é responsabilidade do cliente
❏ Toda a comunicação com o servidor deve ser via web service (REST, SOAP)
❏ O design pattern MVC design está no cliente e não no servidor
❏ Componentes do servidor devem focar na lógica do negócio e serem expostos
em forma de serviço
Benefícios do SOFEA
❏ Scalability
❏ Servidor tem menos trabalho a fazer pois não gera mais a camada de apresentação apenas fornecer um
serviço.
❏ Better user response
❏ Baixa latencia
❏ Após o download da App, somente dados trafegam
❏ Organized programming model
❏ Desenvolvedores de UI concentram-se apenas em client-side
❏ Desenvolvedores do Server-side se concentram apenas em serviços
❏ Interoperability
❏ Integração fácil com multi plataformas
❏ Clientes não se importam se serviços são em C#, Java , Python ou qualquer outro
❏ Higher ROI
❏ Aumenta a possibilidade de Reuso
Protótipo de implementação de SOFEA Client
BFF - Backends for Frontends Pattern
Temos funcionalidades do lado do
servidor que queremos expor para as
interfaces móveis e web o que fazer ?
- Devemos adicionar mais todos os
dados necessários e criar uma
operação nessa API que podemos
utilizar nos dois clientes ?
Como é hoje
Como é hoje outra visão
Por que não ????
❏ Experiências de usuários moveis são diferentes de usuários web
❏ Móvel tem menos espaço na tela, o que significa menos dados a serem exibidos
❏ Muitas chamadas ao servidor podem matar bateria e o plano de dados
❏ Um backend API único pode se tornar um gargalo quando lançar uma nova entrega
❏ Mudanças estão sendo feitas no mesmo artefato e podem afetar negativamente um
consumidor
❏ Muitos consumidores utilizando um único serviço com propósitos diferentes
Problema
Backends for Frontends Pattern
O aplicativo deve ser voltado para o usuário como dois
componentes diferentes
Deverá ser mantido pela mesma equipe que trabalha com a
UI, tornando assim mais fácil de adaptar para o seu tipo de
cliente
BFF
Tempos de Release podem
ser diferentes.
Equipes são diferentes.
BFF
❏ Nasceu para cuidar dos diversos
consumidores que temos hoje para
um único sistema, onde cada um
deles tem uma necessidade.
BFF - Mobile
Chamada de muitos Services
❏ Agregador de chamadas
❏ Paralelizar chamadas
❏ Para mobile reduz o consumo de
bateria e banda
Trabalhando com Falhas no Serviço
❏ Se o serviço de inventory tiver
down, não é necessário interromper
as ações do usuário, quando o
serviço estiver disponível ele voltará
a ver o estoque dos produtos que
ele está selecionando.
Reuso de BFF
❏ Agregando de chamadas a um
mesmo serviço
❏ Mesma funcionalidade em dois
BFFs diferente
Autonomia dos Times
❏ Possibilidade de escalar times
❏ Times trabalham com contratos(interfaces de API)
❏ Times podem ser especializados(Android,IOS,Web)
❏ Featuring podem evoluir separadamente de acordo
com a necessidade especifica
Evolução com BFF
Backends for Frontends
❏ Pode limitar o número de consumidores de acordo com seu
dispositivo
❏ Torna mais fácil de trabalhar com mudanças
❏ Ajuda equipes de desenvolvimento de UI/Mobile a ficarem
mais voltados para o cliente e os dá mais autonomia
❏ Equipes pode controlar seu próprio destino, especializando
para o seu tipo de consumidor
❏ Move o sistema para um design menos acoplado
Single Page Applications - Tools
IDEs
Relembrando - SOFEA - BFF
❏ Sinônimo de “Single Page Applications”
❏ É Architectural Style – não uma implementação
❏ SPAs são aplicações completas, desenvolvidas em JavaScript, que
funcionam quase como se estivessem sendo executadas nativamente no
desktop
❏ BFF - Toda Single Page Application deve possuir um Back-end (serviço,
API)
https://github.com/salerno-rafael/angularJs
O que estão querendo resolver ?
Solução
➢ Bom para criar web-sites dinâmicos com JavaScript
➢ Ajuda a organizar o JavaScript
➢ Ajuda a criar web-sites responsivos rapidamente
➢ Trabalha bem com JQuery
➢ Fácil de testar
➢ Incentiva a testes
➢ clean code
Por que usar Angular ?
➢ Client-side JavaScript Framework para interagir com HTML
➢ Ele é usado em projetos Single Page Application (SPA)
➢ Estende o HTML DOM com atributos adicionais e torná-lo
mais responsivo às ações do usuário.
➢ Open Source
➢ Um dos frameworks mais usados no mundo
➢ Possibilita escrever aplicativos no client-side usando JS
usando MVC
➢ Cross-browser, conseguindo manipular o JS adequadamente
para cada navegador
O que é o Angular ?
by
Core Features
Vantagens
➢ Facilidade para a manutenção
➢ Responsivo
➢ Possibilidade de testar unidades do código
➢ Reusabilidade de componentes
➢ Menos código e mais funcionalidades
➢ View são puramente HTML
➢ Controller são apenas JavaScript
Pontos de Atenção
➢ Devemos ter cuidado com o que está no código já que
esse código estará sendo executado no lado do
cliente
➢ O usuário pode desabilitar o JavaScript da página e
não verá nada
É composto por diretivas ➢ Diretivas são usados para estender HTML.
➢ Estes são atributos especiais que começam com
prefixo NG.
➢ ng-app : Esta diretiva define e vincula um aplicativo
angular.js para HTML
➢ ng-model : Diretiva que vincula os valores dos dados
da aplicação AngularJS para o HTML inputs controls.
➢ ng-bind : Essa diretiva vincula os dados da aplicação
AngularJS para tags HTML.
➢ ng-controller : é o JavaScript object que contém os
attributes/properties e functions
➢ Entre outras…..
Modules
➢ Nos módulos nos poderemos escrever as
partes de código que poderemos utilizar ao
logo da aplicação
➢ Isso faz com que o código seja mais testável,
legível e de fácil manutenção
➢ Podemos definir dependências da app
Expressions ➢ São utilizado para fazer o bind dos dados com o HTML
➢ Expressions são escritos com double braces {{ expression}}
Modules - exemplo - HTML
1
Modules - exemplo - JS
1
Execício 1
➢ Criar um index.html e adicionar uma
expression Angular
➢ Criar um app.js com a declaração de um
modulo strore.
https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js
ng-controllers
➢ são onde definimos os comportamentos da aplicação
➢ é onde é definido funções e valores
➢ Controlles tem um scopo, lugar onde ele é conhecido
2
ng-controllers - exemplo JS
2
ng-controllers - exemplo HTML
Scope
ng-show
Será mostrado somente se o elemento da
exepressao tiver valor = true
3
ng-show - exemplo
3
ng-if
3
ng-hide
Diretiva utilizada para esconder alguma
coisa de acordo com a propriedade
4
ng-hide - exemplo
4
Execício 2
➢ 1. Criar um controller com o nome de
StroreController que retorne produtos
➢ 2. Criar um Json com que tenha valores para
name,price,description
➢ 3. Index.html deve mostrar esses valores do
produto que contem no controller
➢ 4. Utilizar a diretiva ngShow
➢ 5. Utilizar a diretiva ngHide
ng-repeat
Repete a seção
de acordo com o
array (FOR)
5
ng-repeat
5
Filter
| (PIPE) - combina a saída do primeiro elemento com o segundo
6
Filter
6
Execício 3
➢ Adicionar mais valores dentro do JSON de
produtos
➢ Utilizar a diretive ngRepeate para mostrar todos os
produtos
➢ Aplicar filters
ng-src
7
ng-src
como está no contexto angular sem a diretiva ng-
src a imagem não é carregada
7
ng-click
Faz um bind dos do ng-click e o variável para a
variável que foi definida.
A cada click o valor muda
8
ng-click - complete
9
Events
ng-class
9
A directiva ng-class permite definir dinamicamente classes CSS em um elemento HTML por
dados de ligação uma expressão que representa todas as classes a serem adicionados.
Execício 4
➢ Adicionar images dentro do JSON
➢ Mostrar a imagem no HTML
➢ Utilizar ng-click para esconder as Tabs
➢ Utilizar ng-class
Organizar
Organizar com ng-controller
10
Organizar com ng-controller
10
Execício 5
➢ Criar um novo controller
➢ Passar a logica de tabs para o controller
Relembrando
➢ ng-app
➢ ng-controller
➢ ng-show
➢ ng-hide
➢ ng-repeate
➢ Filters
➢ ng-src
➢ ng-click
➢ ng-if
➢ ng-init - A directiva ng-init permite avaliar uma expressão no escopo onde autal.
➢ ng-class
➢ A directiva ng-class permite definir dinamicamente classes CSS em um elemento HTML
por databinding de uma expressão que representa as classes a serem adicionados.
Ajustes
<meta charset="UTF-8">
<div class="col-xs-6 col-xs-offset-2">
https://github.com/salerno-rafael/angularJs-exemplo.git
ng-submit
11
definição da função que é chamada no submit no app.js
Um controller para toda a funcionalidade
Permite chamar uma função do controller quando é submetido
ng-submit
11
ng-submit
11
Execício 6
➢ Criar um novo controller para comentário
➢ Adicionar diretiva ng-submit
➢ Buscar valores de comentários do novo controller
Form validations
12
marcar com required campos que deseja ser validado
evita que o form seja enviado sem estar válido
Form validations
12
Destaca o campo de formulário usando classes
depois que começar a digitar, mostrando se um
campo é válido ou inválido
ng-dirty: mostra se é valido ou invalido após digitar
ng-pristine: valida antes de digitar
Execício 6.1
➢ Validar form
➢ Css para validação
ng-include
13
Para eliminar código duplicado, podemos extrair o código para um HTML e incluir quando necessário
esse pedaço de código
workaround for chrome:
- http://www.chrome-allow-file-access-from-file.com
- http://blog.derraab.com/2013/05/30/start-google-chrome-with-local-file-access-on-mac-os-x
Windows Command Line:
- C:Users-your-user-nameAppDataLocalGoogleChromeApplication
- chrome.exe --allow-file-access-from-files
Execício 6.2
➢ Criar um novo html com conteúdo de:
○ nome do produto
○ button para comprar produto
Custom Directive
14
❏ Deixar mais expressivo
❏ Chamar eventos
❏ Adicionar logica
❏ Reusar componentes comuns
Custom Directive
14
restrict = E -> define diretiva como elemento
restrict = A -> define diretiva como atributo
app.directive -> define como a diretiva vai funcionar
ng-include vs custom
Execício 7
➢ Criar uma diretiva de Elemento e Atributo com
nome de produto e botão para compra
Organizar os Controllers
Custom Directive - Controllers
15
Custom Directive - Controllers
15
Cuidado com o Saco de Gato
Execício 8
➢ Criar uma custom diretiva para controller
Dependência
16
❏ Servem para criar modulos por funcionalidade
❏ Quem fica declarado no ng-app é o modulo de nível mais alto
Dependência
16
Dependência
16
Dependência
16
Execício 8.1
➢ Colocar o novo controller em um arquivo js
➢ Injetar esse novo arquivo chamado panel.js
ng-template
18
ng-template é a diretiva usada para criar uma view html
utilizando uma tag script.
Deve ser definido o ID para referênciar o controller
routerProvider
18
$routeProvider é :
o serviço que definir a configuração de urls
mapenado eles para uma página html correspondente
ou a um ng-template onde anexa um controller.
ng-template - $routerProvider
18
18
= classe java
Métodos do java
Execício 9
➢ Criar um novo index.html e um novo app.js
➢ Testar o ng-template comforme o exemplo anterior
Scope
19
Scope é um objeto do Javascript que compartilha estado os controllers e suas views.
Scope
19
Services
16
❏ $http é utilizado para fazer um request async
❏ O retorno dessa chamada é um Promisse (callback) e pode
retornar .success() ou .errro()
❏ O resultado é um JSON
❏ Além de get, pode ser utilizado, post,put,delete etc.
❏ OBS: nome service dado pelo angular não é adequeado
Callback
Services
17
Services exemplo 2
17
Execício 10
➢ Criar um novo index.html e um novo app.js
➢ Chamar o serviço https://randomuser.me/api/
ou http://uinames.com/api
➢ Mostrar dados no Html
Clean Code Angular
https://github.com/johnpapa/angular-styleguide
❖ Nomenclatura de arquivos
❖ Estrutura de pacotes
❖ Single Responsability
❖ Tratamento de Erros
❖ Etc
JavaScript Testing Framework
❏ Jasmine é um framework de testes Behavior Driven
Development para JavaScript.
❏ Este é adequado para websites, projetos Node.js, ou em
qualquer lugar que o JavaScript pode ser executado.
Instalação
❏ npm install -g jasmine
❏ Ou donwload do pacote e adicionar os JS no projeto
❏ https://github.com/jasmine/jasmine
❏
Exemplo
Exemplo
Exemplo
Exemplo
Exemplo
Exemplo
Exemplo
Execício 11
➢ Criar testes para a página de produtos
Modulo
Mock
Resultado
Execício 12
➢ Criar testes para o módulo
https://github.com/salerno-rafael/nodejs
O que é o Node ?
❏ Node.js é um framework / plataforma baseada em JavaScript construído sobre Google
Chrome's JavaScript V8 Engine.
❏ Ele é usado para desenvolver aplicações com intenso I/O na web como:
❏ sites de streaming de vídeo
❏ single page application
❏ e outros tipos de aplicações web.
❏ é um Server Side plataform
❏ Node.js usa event-drive , non-blocking I /O
❏ Muito bom para aplicações em tempo real de dados intensivos que são executados através
de dispositivos distribuídos.
❏ é cross plataform
❏ Está na versão 5.5.0 as a mais estável é a 4.26 até o momento
Features
❏ Asynchronous
❏ Event Driven
❏ Single Threaded but Highly Scalable
❏ Very Fast - Google Chrome's V8 JavaScript Engine
Quem Usa ?
Quando Usar ?
❏ I/O bound Applications
❏ Data Streaming Applications
❏ Data Intensive Real time Applications (DIRT)
❏ JSON APIs based Applications
❏ Single Page Applications
Checking Installation
node -v deve ser igual a v4.2.6
npm -v deve ser igual a 2.14.12
Criar um main.js
adicionar o console.log("Hello, World!")
node main.js resultado deve ser Hello, World
3 partes importantes
❏ required modules - importação de modulos são feita pelo comando required
❏ Create server − Um servidor que irá ouvir a solicitação do cliente semelhante ao Apache
HTTP Server.
❏ request / response
Server
executar o comando node main.js
1
Execício 1
➢ Criar testes um server node e abrir na porta 3000
npm - Node Package Manager
❏ Prove duas principais funcionalidades:
❏ repositorio online - https://www.npmjs.com/
❏ comand line utilits que ajuda a gerenciar os pacotes de node
npm - Node Package Manager
❏ o comando npm init inicia a estrutura de um projeto
❏ após executar esse comando será criado um arquivo package.json que é onde ficam
guradados das as infrmações sobre dependências
❏ as dependências ficarão guardadas na pasta node_modules da raiz do projeto criado
❏ para adicionar um módulo dever ser executado o comando npm install express --save
❏ uma vez a dependência salva no arquivo package.json pode ser executado o comando
npm install na raiz do projeto e todos as dependências serão instaladas
package.json
Execício 2
➢ executar o comando npm init para criar um
package.json
Callbacks
❏ Node é single threaded application, mas pode suportar concorrência via event e callbacks.
2
Execício 3
➢ fazer uma função para leitura de arquivo de forma
síncrona
➢ fazer uma função para ler de forma assíncrona
Events
❏ Eventos são listeners, e eles são acionados onde espera alguma coisa de
alguma execução
❏ EventEmitter tem tuas principais propriedades:
❏ on -> função para conectar no event
❏ emit -> função para enviar eventos
Events
3
Execício 4
➢ Implementar o events
Streams
❏ Streams são objetos que permitem ler dados de uma fonte ou gravar
dados para um destino em forma contínua.
Streams - Read
4
Streams - Write
4
Streams - Pipe
4
Execício 5
➢ Implementar o stream de leitura do arquivo input.
txt
➢ implementar o stream de write para o arquivo
ouput.txt
Socket.io Exemplo
https://github.com/salerno-rafael/nodejs/tree/master/chat-example
web server
web server
web server
5
web server - client
5
Express
6
❏ É um framework web de node que prove features robustas para
desenvolvimento web.
❏ Permite a criação de middlewares para responder às requests HTTP.
❏ Define uma tabela de roteamento que é usado para executar a ação
diferente com base no Método HTTP e URL.
❏ Permite renderizar dinamicamente páginas HTML com base na
passagem de argumentos para modelos.
Express Install
6
❏ instalação do módulo:
❏ npm install express --save
❏ Quando se trabalha com express esses três modulos são importântes:
❏ npm install body-parser --save
❏ npm install cookie-parser --save
❏ npm install multer --save
❏ abrir pasta node_modules e confirmar as instalações
Express
6
Express - Operações
6
Express - Serving Static Files
7
Express - Serving Static Files
7
Execício
➢ implementar server node com statics
Express - Form
8
Express - Form
8
Serviços
A
B
C
Exemplo de Operações
9
Operação Http Method Resultado
listUsers GET Mostrat todos os usuários
salvos
addUser POST adicionar novo usuário
deleteUser DELETE remover usuário
:id GET detalhes de um usuário
especifico
Exemplo de Operações - Base de Dados
9
Exemplo de Operações - Listar
9
Exemplo de Operaçõs - Adicionar
9
Exemplo de Operações - Detalhe
9
Exemplo de Operações - Delete
9
Execício
➢ implementar serviço de form
Estrutura de pastas
10
10
Dados no Serviço
10
Dados no Serviço
10
Angular recebendo dados
Execício
➢ implementar node + angular
Instalação
❏ npm install -g mocha
❏ npm install mocha --save
❏ npm install chai --save
Unit-Test
Classe
Unit-Test
Resultado
Automate and enhance your workflow
O que é ?
❏ Automatizador - é uma ferramenta que ajuda a automatizar tarefas repetitivas ou demorados
em no fluxo de trabalho de desenvolvimento como:
❏ concatenação de arquivos
❏ minificação
❏ testes
❏ Independente de plataforma - integrações são feitas em todos os principais IDEs pode ser
usado com PHP, .NET, Node.js, Java e outras plataformas.
Instalação
11
❏ npm install --global gulp-cli
❏ instala de forma global o cliente do gulp
❏ npm install --save-dev gulp
❏ adiciona no projeto
❏ adicionar o arquivo gulpfile.js na raiz do projeto
Dependências
11
❏ npm install gulp-develop-server --save-dev
❏ npm install gulp-exec --save-dev
❏ npm install gulp-jshint --save-dev
❏ npm install jshint --save-dev
❏ npm install jshint-stylish --save-dev
❏ npm install gulp-util --save-dev
❏ npm install gulp-watch --save-dev
gulpfile.js
11
gulpfile.js
11
❏ task 'server:start' = gulp server:start
❏ inicia o node server.js
❏ task 'watch' = gulp watch
❏ verifica se a mudançar e starta o serviço novamente com as
alterações
❏ task 'hint' = gulp hint
❏ executa lint nos arquivos *.js
❏ JSHint é uma ferramenta para detectar erros e potenciais problemas
no código JavaScript e para impor convenções de codificação da sua
equipe.
O que é ?
❏ O GruntJS é um “Task Runner”.
❏ Ele roda a partir do Terminal e serve para automatizar tarefas como:
❏ concatenação de scripts
❏ compilação
❏ minificação
❏ testes unitários
❏ linting
Instalação
12
❏ npm install -g grunt-cli
❏ instala de forma global o cliente do grunt
❏ npm install grunt --save-dev
❏ adiciona no projeto
❏ adicionar o arquivo Gruntfile.js na raiz do projeto
❏ O Gruntfile.js é o arquivo de configuração do Grunt. Nele você vai
dizer tudo o que o Grunt deve fazer.
Dependências
12
❏ npm install grunt-contrib-watch --save-dev
❏ npm install grunt-run --save-dev
❏ npm install grunt-mocha-test --save-dev
Gruntfile.js
12
Gruntfile.js
12
❏ task 'run = grunt r
❏ inicia o node server.js
❏ task 'watch' = grunt w
❏ verifica se a mudançar e starta o serviço novamente com as
alterações
❏ task 'mochaTest' = grun test
❏ executa todos os arquivos com testes de js
Grunt
❏ Comunidade é grande
❏ mais de 5 mil plugins
❏ está algum tempo no mercado
❏ usado por grandes sites
Gulp
❏ é mais rápido comparado ao grunt
❏ mais de 2 mil plugins
❏ usa mais código para gerar configuração
Config das mesmas Tasks
O que é ?
❏ O Bower é um projeto que permite gerenciar dependências client-side
❏ Em vez de ter que entrar no site de cada projeto que você quer usar e
baixar os arquivos necessários, você pode automatizar este processo
criando um arquivo de manifesto.
Instalação
13
❏ npm install -g bower
❏ instala de forma global o cliente do bower
❏ bower init
❏ configura um projeto bower
❏ após disso será gerado o arquivo bower.json
Depenências do Bower
13
❏ bower install bootstrap --save
❏ bower install angular --save
❏ bower install jquery --save
bower.js
13
Referências no HTML
13
Pacotes do Bower
Pesquisa visual :
http://bower.io/search/
Pesquisa por comand line:
ex: bower search angular
Instalação de todos os pacotes no bower.js:
bower install
Atualização de pacotes :
bower update jquery
Remover pacote:
bower unistall jquery
O que é ?
❏ jQuery é uma biblioteca JavaScript rápida e concisa criado em 2006
❏ Simpifica o tratamento do HTML, manipulação de eventos, animação e
interações Ajax no desenvolvimento web
❏ Tem o lema de escrever menos para fazer mais.
Features
❏ Dom Manipulation
❏ Event Handling
❏ Ajax support
❏ Animation
❏ Lightweight
❏ Cross Browser Support
O que é ?
❏ Bootstrap é um framework front-end que facilita a vida dos desenvolvedores web a criar sites
com tecnologia mobile (responsivo) sem ter que digitar uma linha de CSS para “fazer e
acontecer”.
❏ Bootstrap possui uma diversidade de componentes (plugins) em JavaScript (jQuery) que
auxiliam o designer a implementar:
❏ tootlip
❏ menu-dropdown
❏ modal
❏ carousel
❏ slideshow
❏ entre outros
❏ Para isso é necessário apenas acrescentando algumas configurações no código, sem a
necessidade de criar scripts.
Por que usar ?
❏ Mobile first approach - Possibilitar utilizar mesmos estilos para todos os dispositivos sem
mudar arquivos
❏ Browser Support
❏ Easy to get started - Documentação muito boa
❏ Responsive design - CSS responsivo se ajusta para Desktops, Tablets and Mobiles
Boostrap Parts
Bootstrap Grid System
❏ Pode ser considerado a parte mais importante do Bootstrap
❏ O grid system trabalha com até 12 colunas que se
adaptam apropriadamente ao tamanho da tela de acordo
com o dispositivo
❏ Possui classes pré definidas para opções de layouts
específicos ou para ou mix de layouts
Grid System
exemplo1
Grid System - columns
exemplo1
12 colunas em todos os dispositivos
Grid System - offset
exemplo2
Aumentar a margem esquerda de uma coluna onde essa coluna tem
um intervalo de 1 a 11.
Div
exemplo3
exemplo3
Div
Div
Componentes
buttons / drop buttons
tabs
pagination
navbar
Componentes
labels
Sites que usam Boostrap
Boostrap + NodeJS + Angular
14
Boostrap + NodeJS + Angular
14
Boostrap + NodeJS + Angular
14
Boostrap + NodeJS + Angular
14
O que é ?
❏ Browserify permite require ( 'modules') no navegador, através do
agrupamento de todos os seus dependências.
❏ Browsers não tem o método require como Node.js.
❏ Com Browserify você pode escrever código da mesma forma que você
iria usá-lo em Node.
Onde ele Funciona ?
Browserify traz o que
funciona no NodeJs
para o Browser
Exemplo
Exemplo
Compatibilidade
https://github.com/salerno-rafael/react
O que é ?
❏ É uma biblioteca de UI desenvolvido no Facebook para facilitar a
criação de componentes de interface do usuário interativa.
❏ Pode ser usado no client side e no server Side
❏ Usa um conceito chamado o DOM virtual
❏ Processa seletivamente partes do DOM, alterando somente
estrutura e dados necessários.
Virtual DOM (Document Object Model)
❏ Imagine que você tinha um objeto que você modelada em torno de
um Carro.
❏ O React espelha esse objeto
❏ Agora nesse objeto espelhado de carro, eu adiciono novas rodas e
um farol diferente
❏ Antes de aplicar essas alterações no carro o React realiza um diff e
muda somente o que foi alterado.
Virtual DOM (Document Object Model)
Instalação
$ npm install --save react react-dom
$ bower install --save react
Exemplo
Exemplo
Exemplo 1
Exemplo 2 - Reuso de Componentes
Exemplo 3 - Propriedades
Exemplo 4 - MarkDown
Exemplo 4 - MarkDown
O que é ?
"Isso vai revolucionar a Web!"
Templates
❏ Os Template definem partes reutilizáveis de DOM.
❏ Não será executada até que o conteúdo do Template seja realmente
anexado ao DOM.
❏ Isso significa <img> não são baixados, os scripts não são executados até
que seja necessário - há poupança de largura de banda e processamento.
❏ Tudo o que está em um Template é escondido em um querySelector assim
os scripts em sua página não vai acidentalmente manipular o conteúdo
original de outro Template.
Templates - Exemplo
Shadow DOM
❏ Emcapsulate o conteúdo do DOM
❏ Deixa privado o JS/CSS para o HTML
❏ Permite criar trechos de nós de elementos de DOM que são
independentes e isolados entre si, onde o estilo de um trecho não
interfere com outro
❏ Suportado apenas por Chrome e Firefox
❏ Safari está implementando
❏ IE pra varias nem tentou implementar
Shadow DOM - Exemplo
❏ Vamos pensar em uma tag <video>.
❏ Ele consiste de controles como o botão play, barra de progresso e
os controles de volume.
❏ Cada um desses controles é implementado como um <div> dentro
da tag <video> que na verdade não é acessível para as os scripts
na página, mas é processado na tela usuários.
❏ Shadow DOM é uma ferramenta que vamos o desenvolvedor web
criar a sua própria marcação e estilos escondido encapsulado da
mesma forma em que <video> controles são feitos.
Shadow DOM - Exemplo
Custom Element
❏ Custom Elements = Templates + Shadow DOM
❏ Podemos criar elementos de primeira classe como <body> <input>
❏ A idéia é encapsular tudo dentro de tags simples e mais fáceis de
manusear.
❏ Reagem ao cliclo de vida do DOM
Custom Element - Exemplo
HTML Imports
❏ Importações carregar recursos externos, tais como Templates ou
Custom Elements
❏ Um Custom Elements contido em um arquivo my-gravatar.html.
❏ Arquivos HTML importados podem conter Templates, stylesheets e
scripts.
❏ Eles são executados quando a importação é carregado.
HTML Imports - Exemplo
Quem implementa?
O que é ?
❏ Aplicações JavaScript que rodam tanto no client-side
quanto no server-side
❏ Pode se gerar o html tanto no lado servidor quanto
no lado do cliente
❏ Virtualmente usando exatamente o mesmo código
em ambos os ambientes
Benefício
Facilidade para manter o código, reduz a duplicação de
código
Seach engine optimization - o Google pode rastrear aplicativos
JavaScript em sites, problema criado por ter Single Page
Mais rápido para processar o conteúdo HTML, diretamente no
navegador. Melhor experiência geral do usuário.
Mesmo Framework que roda cliet-side e server-side
Open Components Framework
O que é ?
❏ OpenComponents é um framework para desenvolver e distribuídas
html components
❏ Ferramentas para facilitar o compartilhamento de código, reduzir
dependências e facilmente abordar novos recursos.
❏ Os componentes são pequenas unidades de código isomórfico,
constituídos principalmente por html, javascript, css.
❏ Podem conter logica no server-side (node.js) que pode ser usado
para compor uma funcionalidade na client-side
❏ Renderização eles são peças de html puro para ser injetado em
qualquer página html.
Objetivo
❏ Permite que seja criado e publica novos componentes
independentes
❏ Componentes de dados
❏ Que os consumidores possam ter um controle mais granular
❏ Versionamento de componentes imutáveis
❏ Otimizar a renderização do lado do cliente
❏ Performance
❏ Robustez
❏ A/B testing
Open Components - Exemplo
Open Components - Exemplo
GraphQL
Pensar em dados e
relaciomento com
tables, joins
Pensar em dados
como objetos, grafos,
JSON
O que é ?
❏ É uma linguagem de consulta de front-end para recuperar dados de
back-end.
❏ Busca de dados e Manipulação de dados
❏ GraphQL.js fornece duas importantes capacidades:
❏ construir um type schema
❏ executar consultas nesse type schema.
❏ Pode ser utilizado para fazer agregação do lado do cliente
Exemplo de Query
Exemplo de Resultado
Exemplo Implementação
Princípios
❏ O GraphQL não foi pensado em fornecer dados através de urls
❏ Mas sim fornecer dados em Grafos de objetos e seus modelos
❏ A ideia é que as consultas e as respostas sejam construídas e
retornadas
❏ A estrutura deve possuir uma hierarquia
❏ Impulsionada pelos requisitos da View e os engenheiros front-end
❏ GraphQL possibilita pensar nos requisitos e criar consultas em
runtime
Tipos de Comunicação
GraphQL Server APP
Exemplo
FastFlux
O que é ?
❏ Simples e poderoso gerenciador de estado para
React, baseado na arquitetura Flux.
❏ Implementando com funções reativas de single-
evente steam como :
❏ Obsevable
❏ ObservableState
Por que ?
❏ React é uma biblioteca de view component, não um framework
web
❏ Ele processa o estado do aplicativo, mas não diz nada sobre
como gerenciar esse estado através de sua aplicação.
❏ O estado pode ser definida em um componente raiz e passada
para o resto da árvore por props.
❏ Quando é necessário passar estados por callback e props
começa a ficar trabalhoso e complicado
❏ O fastflux gerencia esse tipo de estado
Quando Usar ?
Objetivo
❏ Legibilidade com estados
❏ Functional Reactive Programing core:
❏ tudo é observable
❏ functional trasformations: map,fliter reduce
❏ Incentiva o uso de ES6
ECMAScripts
Como usar Hoje ???
Os browsers não suportam todas as funcionalidades,
para isso podemos utilizar o babel, que transforma o
JavaScript na versão compatível com todos os browsers.
Workshop: Front End Architecture e Tecnologias de Front End
@salerno_rafael
github.com/salerno-rafael

Front end architecture

  • 1.
    Workshop: Front EndArchitecture e Tecnologias de Front End @salerno_rafael github.com/salerno-rafael
  • 2.
  • 3.
    Agenda ❖ SOA ❖ Tiposde Arquiteturas de Web App ❖ SOFEA ❖ Sigle Page Application ❖ Backends for Frontends Pattern - BFF ❖ Angular ❖ Angular Testes ❖ Angular Mock ❖ NodeJs ❖ NodeJs + Angular ❖ NodeJs Teste ❖ Gulp ❖ Grunt ❖ Grunt vs Gulp ❖ Bower ❖ JQuery ❖ Boostrap ❖ Boostrap + NodeJs + Angular ❖ Browserify ❖ React ❖ Web components ❖ Isomorphic JavaScript ❖ Open Components ❖ FastFlux ❖ GraphQL ❖ Redux ❖ Relay
  • 4.
  • 6.
    Interoperabilidade Intrínseca Se os programasde software não são projetados para serem compatíveis, eles provavelmente não serão interoperáveisFlexibilidade a característica de flexibilidade vai além da capacidade dos serviços para efetivamente compartilhar dados. Os serviços devem ser flexíveis e podem ser combinados e agregados em soluções compostas. Refinamento evolucionário Evoluir aos poucos não precisa chegar na perfeição na versão 1 Serviços compartilhados Objetivos estratégicos priorizar a realização de longo prazo e os objetivos estratégicos de negócios Valor de Negócio Não se trata de tecnologia de determinar a direção da empresa, trata-se da visão de negócios ditando a utilização da tecnologia. Soa Manifesto
  • 10.
  • 11.
  • 12.
    Devem mudar masatendendo o prometido
  • 16.
    Por que lembradode SOA ???
  • 17.
  • 18.
    Por que nãofazer o mesmo na UI ???
  • 20.
  • 21.
    Estudar o passadopara mudar o futuro
  • 22.
    Como é Hoje??Tipos de Arquiteturas de Web App tinhamos?
  • 23.
    Tipos de Arquiteturasde Web App Utilizadas ❏ Web Templating Engines ❏ MVC Frameworks
  • 24.
    Web Templating Engines ❏Código do framework (embedded) dentro de elementos státicos do HTML ❏ Mix de estático e HTML dinâmico ❏ Exemplos de templates Engines: ❏ Java Server Pages ❏ PHP ❏ Active Server Pages
  • 25.
  • 27.
    MVC Frameworks ❏ ModelView Controller pattern ❏ Server side framework ❏ Exemplos : ❏ ASP.NET MVC Framework (.Net) ❏ Struts, Spring MVC (Java) ❏ Ruby on Rails (Ruby) ❏ Django (Python) ❏ Grails (Groovy)
  • 28.
  • 29.
    AJAX ❏ Asynchronous JavaScriptAnd XML ❏ Alterações de conteúdo dinâmico sem recarregar a página inteira ❏ Permite que as páginas da web para ser atualizado de forma assíncrona através da troca de pequenas quantidades de dados com o servidor em background
  • 30.
  • 31.
    MVC = WebTemplating Engines
  • 32.
    Processo das WebApplications JSP/JSF/PHP/etc..
  • 33.
    Processo das WebApplications 1. Application Download (Download da Aplicação) a. (JavaScript, HTML, Applets, Flash) código fica em constante download para o cliente (web browser) 2. Presentation Flow (Fluxo de Apresentação) a. Renderização dinâmica visual da interface do usuário (tela muda, novo telas, etc) b. Response à cada input do usuário e estado dos dados são alteradas 3. Data Interchange ( Troca de Dados) a. Troca de dados entre dois componentes de software e duas camadas b. search, updates, retrieval, etc
  • 34.
    Characteristicas da WebTemplating Engines e MVC Frameworks ❏ Acoplamento forte entre o Presentation flow e Data interchange ❏ Inicio de um Presentation Flow em uma aplicação web sempre inicia uma Operação de troca de dados ❏ A cada operação de Troca de dados (Data Interchange) chamada resulta em uma operação do Presentation Flow ❏ Pesentation flow e Data interchange de dados são preocupações que geralmente estão associados
  • 35.
  • 38.
    Por que nãoposso usar simplesmente os novos Frameworks ????
  • 40.
    ❏ Propõe removertoda a lógica da camada de apresentação do servidor para colocar a lógica no JavaScript no lado do cliente ❏ Um estilo de arquitetura para aplicações web em ambientes SOA & Cloud
  • 42.
    SOFEA ❏ Sinônimo de“Single Page Applications” ❏ Como construir aplicações Front-ends em um ambiente Service-Oriented ❏ É Architectural Style – não uma implementação ❏ Tem o propósito de trazer a revolução de SOA no back-end para o Front-End
  • 43.
  • 44.
    Single Page Applications ❏Por que subutilizar o lado do cliente enquanto sobrecarregamos o lado do servidor? ❏ Por que não equilibrar melhor esta carga? ❏ Melhorar a experiência ao usuário da aplicação por meio de maior ênfase nas técnicas de front-end development. ❏ Escrever menos código server-side e mais código client-side ❏ Organizar da melhor maneira possível este código JavaScript
  • 45.
  • 47.
    Por que somenteagora SOFEA? ❏ Redução da complexidade para a criação de web apps ❏ Evolução do browsers(JavaScript browser engines, AJAX toolkits) ❏ Evolução do frameworks client-side ❏ Simplicidade no cliente ❏ Heterogeneidade da equipe ❏ Maturidade de SOA e de Cloud ❏ Clientes mobile crescem dominantemente
  • 51.
  • 53.
    Princípios do SOFEA ❏Download da Aplicação,Troca de Dados, e Fluxo de Apresentação devem estar desacoplados ❏ Fluxo de Apresentação é responsabilidade do cliente ❏ Toda a comunicação com o servidor deve ser via web service (REST, SOAP) ❏ O design pattern MVC design está no cliente e não no servidor ❏ Componentes do servidor devem focar na lógica do negócio e serem expostos em forma de serviço
  • 55.
    Benefícios do SOFEA ❏Scalability ❏ Servidor tem menos trabalho a fazer pois não gera mais a camada de apresentação apenas fornecer um serviço. ❏ Better user response ❏ Baixa latencia ❏ Após o download da App, somente dados trafegam ❏ Organized programming model ❏ Desenvolvedores de UI concentram-se apenas em client-side ❏ Desenvolvedores do Server-side se concentram apenas em serviços ❏ Interoperability ❏ Integração fácil com multi plataformas ❏ Clientes não se importam se serviços são em C#, Java , Python ou qualquer outro ❏ Higher ROI ❏ Aumenta a possibilidade de Reuso
  • 56.
  • 57.
    BFF - Backendsfor Frontends Pattern
  • 58.
    Temos funcionalidades dolado do servidor que queremos expor para as interfaces móveis e web o que fazer ? - Devemos adicionar mais todos os dados necessários e criar uma operação nessa API que podemos utilizar nos dois clientes ? Como é hoje
  • 59.
    Como é hojeoutra visão
  • 60.
    Por que não???? ❏ Experiências de usuários moveis são diferentes de usuários web ❏ Móvel tem menos espaço na tela, o que significa menos dados a serem exibidos ❏ Muitas chamadas ao servidor podem matar bateria e o plano de dados ❏ Um backend API único pode se tornar um gargalo quando lançar uma nova entrega ❏ Mudanças estão sendo feitas no mesmo artefato e podem afetar negativamente um consumidor ❏ Muitos consumidores utilizando um único serviço com propósitos diferentes
  • 61.
  • 62.
    Backends for FrontendsPattern O aplicativo deve ser voltado para o usuário como dois componentes diferentes Deverá ser mantido pela mesma equipe que trabalha com a UI, tornando assim mais fácil de adaptar para o seu tipo de cliente
  • 63.
    BFF Tempos de Releasepodem ser diferentes. Equipes são diferentes.
  • 64.
    BFF ❏ Nasceu paracuidar dos diversos consumidores que temos hoje para um único sistema, onde cada um deles tem uma necessidade.
  • 65.
  • 66.
    Chamada de muitosServices ❏ Agregador de chamadas ❏ Paralelizar chamadas ❏ Para mobile reduz o consumo de bateria e banda
  • 67.
    Trabalhando com Falhasno Serviço ❏ Se o serviço de inventory tiver down, não é necessário interromper as ações do usuário, quando o serviço estiver disponível ele voltará a ver o estoque dos produtos que ele está selecionando.
  • 68.
    Reuso de BFF ❏Agregando de chamadas a um mesmo serviço ❏ Mesma funcionalidade em dois BFFs diferente
  • 69.
    Autonomia dos Times ❏Possibilidade de escalar times ❏ Times trabalham com contratos(interfaces de API) ❏ Times podem ser especializados(Android,IOS,Web) ❏ Featuring podem evoluir separadamente de acordo com a necessidade especifica
  • 70.
  • 71.
    Backends for Frontends ❏Pode limitar o número de consumidores de acordo com seu dispositivo ❏ Torna mais fácil de trabalhar com mudanças ❏ Ajuda equipes de desenvolvimento de UI/Mobile a ficarem mais voltados para o cliente e os dá mais autonomia ❏ Equipes pode controlar seu próprio destino, especializando para o seu tipo de consumidor ❏ Move o sistema para um design menos acoplado
  • 73.
  • 74.
  • 75.
    Relembrando - SOFEA- BFF ❏ Sinônimo de “Single Page Applications” ❏ É Architectural Style – não uma implementação ❏ SPAs são aplicações completas, desenvolvidas em JavaScript, que funcionam quase como se estivessem sendo executadas nativamente no desktop ❏ BFF - Toda Single Page Application deve possuir um Back-end (serviço, API)
  • 76.
  • 77.
    O que estãoquerendo resolver ?
  • 78.
  • 80.
    ➢ Bom paracriar web-sites dinâmicos com JavaScript ➢ Ajuda a organizar o JavaScript ➢ Ajuda a criar web-sites responsivos rapidamente ➢ Trabalha bem com JQuery ➢ Fácil de testar ➢ Incentiva a testes ➢ clean code Por que usar Angular ?
  • 81.
    ➢ Client-side JavaScriptFramework para interagir com HTML ➢ Ele é usado em projetos Single Page Application (SPA) ➢ Estende o HTML DOM com atributos adicionais e torná-lo mais responsivo às ações do usuário. ➢ Open Source ➢ Um dos frameworks mais usados no mundo ➢ Possibilita escrever aplicativos no client-side usando JS usando MVC ➢ Cross-browser, conseguindo manipular o JS adequadamente para cada navegador O que é o Angular ? by
  • 82.
  • 83.
    Vantagens ➢ Facilidade paraa manutenção ➢ Responsivo ➢ Possibilidade de testar unidades do código ➢ Reusabilidade de componentes ➢ Menos código e mais funcionalidades ➢ View são puramente HTML ➢ Controller são apenas JavaScript
  • 84.
    Pontos de Atenção ➢Devemos ter cuidado com o que está no código já que esse código estará sendo executado no lado do cliente ➢ O usuário pode desabilitar o JavaScript da página e não verá nada
  • 85.
    É composto pordiretivas ➢ Diretivas são usados para estender HTML. ➢ Estes são atributos especiais que começam com prefixo NG. ➢ ng-app : Esta diretiva define e vincula um aplicativo angular.js para HTML ➢ ng-model : Diretiva que vincula os valores dos dados da aplicação AngularJS para o HTML inputs controls. ➢ ng-bind : Essa diretiva vincula os dados da aplicação AngularJS para tags HTML. ➢ ng-controller : é o JavaScript object que contém os attributes/properties e functions ➢ Entre outras…..
  • 86.
    Modules ➢ Nos módulosnos poderemos escrever as partes de código que poderemos utilizar ao logo da aplicação ➢ Isso faz com que o código seja mais testável, legível e de fácil manutenção ➢ Podemos definir dependências da app
  • 87.
    Expressions ➢ Sãoutilizado para fazer o bind dos dados com o HTML ➢ Expressions são escritos com double braces {{ expression}}
  • 88.
  • 89.
  • 90.
    Execício 1 ➢ Criarum index.html e adicionar uma expression Angular ➢ Criar um app.js com a declaração de um modulo strore. https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js
  • 91.
    ng-controllers ➢ são ondedefinimos os comportamentos da aplicação ➢ é onde é definido funções e valores ➢ Controlles tem um scopo, lugar onde ele é conhecido 2
  • 92.
  • 93.
  • 94.
    ng-show Será mostrado somentese o elemento da exepressao tiver valor = true 3
  • 95.
  • 96.
  • 97.
    ng-hide Diretiva utilizada paraesconder alguma coisa de acordo com a propriedade 4
  • 98.
  • 99.
    Execício 2 ➢ 1.Criar um controller com o nome de StroreController que retorne produtos ➢ 2. Criar um Json com que tenha valores para name,price,description ➢ 3. Index.html deve mostrar esses valores do produto que contem no controller ➢ 4. Utilizar a diretiva ngShow ➢ 5. Utilizar a diretiva ngHide
  • 100.
    ng-repeat Repete a seção deacordo com o array (FOR) 5
  • 101.
  • 102.
    Filter | (PIPE) -combina a saída do primeiro elemento com o segundo 6
  • 103.
  • 104.
    Execício 3 ➢ Adicionarmais valores dentro do JSON de produtos ➢ Utilizar a diretive ngRepeate para mostrar todos os produtos ➢ Aplicar filters
  • 105.
  • 106.
    ng-src como está nocontexto angular sem a diretiva ng- src a imagem não é carregada 7
  • 107.
    ng-click Faz um binddos do ng-click e o variável para a variável que foi definida. A cada click o valor muda 8
  • 108.
  • 109.
  • 110.
    ng-class 9 A directiva ng-classpermite definir dinamicamente classes CSS em um elemento HTML por dados de ligação uma expressão que representa todas as classes a serem adicionados.
  • 111.
    Execício 4 ➢ Adicionarimages dentro do JSON ➢ Mostrar a imagem no HTML ➢ Utilizar ng-click para esconder as Tabs ➢ Utilizar ng-class
  • 112.
  • 113.
  • 114.
  • 115.
    Execício 5 ➢ Criarum novo controller ➢ Passar a logica de tabs para o controller
  • 116.
    Relembrando ➢ ng-app ➢ ng-controller ➢ng-show ➢ ng-hide ➢ ng-repeate ➢ Filters ➢ ng-src ➢ ng-click ➢ ng-if ➢ ng-init - A directiva ng-init permite avaliar uma expressão no escopo onde autal. ➢ ng-class ➢ A directiva ng-class permite definir dinamicamente classes CSS em um elemento HTML por databinding de uma expressão que representa as classes a serem adicionados.
  • 117.
    Ajustes <meta charset="UTF-8"> <div class="col-xs-6col-xs-offset-2"> https://github.com/salerno-rafael/angularJs-exemplo.git
  • 118.
    ng-submit 11 definição da funçãoque é chamada no submit no app.js Um controller para toda a funcionalidade Permite chamar uma função do controller quando é submetido
  • 119.
  • 120.
  • 121.
    Execício 6 ➢ Criarum novo controller para comentário ➢ Adicionar diretiva ng-submit ➢ Buscar valores de comentários do novo controller
  • 122.
    Form validations 12 marcar comrequired campos que deseja ser validado evita que o form seja enviado sem estar válido
  • 123.
    Form validations 12 Destaca ocampo de formulário usando classes depois que começar a digitar, mostrando se um campo é válido ou inválido ng-dirty: mostra se é valido ou invalido após digitar ng-pristine: valida antes de digitar
  • 124.
    Execício 6.1 ➢ Validarform ➢ Css para validação
  • 125.
    ng-include 13 Para eliminar códigoduplicado, podemos extrair o código para um HTML e incluir quando necessário esse pedaço de código workaround for chrome: - http://www.chrome-allow-file-access-from-file.com - http://blog.derraab.com/2013/05/30/start-google-chrome-with-local-file-access-on-mac-os-x Windows Command Line: - C:Users-your-user-nameAppDataLocalGoogleChromeApplication - chrome.exe --allow-file-access-from-files
  • 126.
    Execício 6.2 ➢ Criarum novo html com conteúdo de: ○ nome do produto ○ button para comprar produto
  • 127.
    Custom Directive 14 ❏ Deixarmais expressivo ❏ Chamar eventos ❏ Adicionar logica ❏ Reusar componentes comuns
  • 128.
    Custom Directive 14 restrict =E -> define diretiva como elemento restrict = A -> define diretiva como atributo app.directive -> define como a diretiva vai funcionar
  • 129.
  • 130.
    Execício 7 ➢ Criaruma diretiva de Elemento e Atributo com nome de produto e botão para compra
  • 131.
  • 132.
    Custom Directive -Controllers 15
  • 134.
    Custom Directive -Controllers 15
  • 135.
    Cuidado com oSaco de Gato
  • 136.
    Execício 8 ➢ Criaruma custom diretiva para controller
  • 138.
    Dependência 16 ❏ Servem paracriar modulos por funcionalidade ❏ Quem fica declarado no ng-app é o modulo de nível mais alto
  • 139.
  • 140.
  • 141.
  • 142.
    Execício 8.1 ➢ Colocaro novo controller em um arquivo js ➢ Injetar esse novo arquivo chamado panel.js
  • 143.
    ng-template 18 ng-template é adiretiva usada para criar uma view html utilizando uma tag script. Deve ser definido o ID para referênciar o controller
  • 144.
    routerProvider 18 $routeProvider é : oserviço que definir a configuração de urls mapenado eles para uma página html correspondente ou a um ng-template onde anexa um controller.
  • 145.
  • 146.
  • 147.
    Execício 9 ➢ Criarum novo index.html e um novo app.js ➢ Testar o ng-template comforme o exemplo anterior
  • 148.
    Scope 19 Scope é umobjeto do Javascript que compartilha estado os controllers e suas views.
  • 149.
  • 150.
    Services 16 ❏ $http éutilizado para fazer um request async ❏ O retorno dessa chamada é um Promisse (callback) e pode retornar .success() ou .errro() ❏ O resultado é um JSON ❏ Além de get, pode ser utilizado, post,put,delete etc. ❏ OBS: nome service dado pelo angular não é adequeado
  • 151.
  • 152.
  • 153.
  • 154.
    Execício 10 ➢ Criarum novo index.html e um novo app.js ➢ Chamar o serviço https://randomuser.me/api/ ou http://uinames.com/api ➢ Mostrar dados no Html
  • 155.
    Clean Code Angular https://github.com/johnpapa/angular-styleguide ❖Nomenclatura de arquivos ❖ Estrutura de pacotes ❖ Single Responsability ❖ Tratamento de Erros ❖ Etc
  • 158.
    JavaScript Testing Framework ❏Jasmine é um framework de testes Behavior Driven Development para JavaScript. ❏ Este é adequado para websites, projetos Node.js, ou em qualquer lugar que o JavaScript pode ser executado.
  • 159.
    Instalação ❏ npm install-g jasmine ❏ Ou donwload do pacote e adicionar os JS no projeto ❏ https://github.com/jasmine/jasmine ❏
  • 160.
  • 161.
  • 162.
  • 163.
  • 164.
  • 165.
  • 166.
  • 167.
    Execício 11 ➢ Criartestes para a página de produtos
  • 170.
  • 171.
  • 172.
  • 173.
    Execício 12 ➢ Criartestes para o módulo
  • 174.
  • 175.
    O que éo Node ? ❏ Node.js é um framework / plataforma baseada em JavaScript construído sobre Google Chrome's JavaScript V8 Engine. ❏ Ele é usado para desenvolver aplicações com intenso I/O na web como: ❏ sites de streaming de vídeo ❏ single page application ❏ e outros tipos de aplicações web. ❏ é um Server Side plataform ❏ Node.js usa event-drive , non-blocking I /O ❏ Muito bom para aplicações em tempo real de dados intensivos que são executados através de dispositivos distribuídos. ❏ é cross plataform ❏ Está na versão 5.5.0 as a mais estável é a 4.26 até o momento
  • 176.
    Features ❏ Asynchronous ❏ EventDriven ❏ Single Threaded but Highly Scalable ❏ Very Fast - Google Chrome's V8 JavaScript Engine
  • 177.
  • 178.
    Quando Usar ? ❏I/O bound Applications ❏ Data Streaming Applications ❏ Data Intensive Real time Applications (DIRT) ❏ JSON APIs based Applications ❏ Single Page Applications
  • 179.
    Checking Installation node -vdeve ser igual a v4.2.6 npm -v deve ser igual a 2.14.12 Criar um main.js adicionar o console.log("Hello, World!") node main.js resultado deve ser Hello, World
  • 180.
    3 partes importantes ❏required modules - importação de modulos são feita pelo comando required ❏ Create server − Um servidor que irá ouvir a solicitação do cliente semelhante ao Apache HTTP Server. ❏ request / response
  • 181.
  • 182.
    Execício 1 ➢ Criartestes um server node e abrir na porta 3000
  • 183.
    npm - NodePackage Manager ❏ Prove duas principais funcionalidades: ❏ repositorio online - https://www.npmjs.com/ ❏ comand line utilits que ajuda a gerenciar os pacotes de node
  • 184.
    npm - NodePackage Manager ❏ o comando npm init inicia a estrutura de um projeto ❏ após executar esse comando será criado um arquivo package.json que é onde ficam guradados das as infrmações sobre dependências ❏ as dependências ficarão guardadas na pasta node_modules da raiz do projeto criado ❏ para adicionar um módulo dever ser executado o comando npm install express --save ❏ uma vez a dependência salva no arquivo package.json pode ser executado o comando npm install na raiz do projeto e todos as dependências serão instaladas
  • 185.
  • 186.
    Execício 2 ➢ executaro comando npm init para criar um package.json
  • 187.
    Callbacks ❏ Node ésingle threaded application, mas pode suportar concorrência via event e callbacks. 2
  • 188.
    Execício 3 ➢ fazeruma função para leitura de arquivo de forma síncrona ➢ fazer uma função para ler de forma assíncrona
  • 189.
    Events ❏ Eventos sãolisteners, e eles são acionados onde espera alguma coisa de alguma execução ❏ EventEmitter tem tuas principais propriedades: ❏ on -> função para conectar no event ❏ emit -> função para enviar eventos
  • 190.
  • 191.
  • 192.
    Streams ❏ Streams sãoobjetos que permitem ler dados de uma fonte ou gravar dados para um destino em forma contínua.
  • 193.
  • 194.
  • 195.
  • 196.
    Execício 5 ➢ Implementaro stream de leitura do arquivo input. txt ➢ implementar o stream de write para o arquivo ouput.txt
  • 198.
  • 199.
  • 200.
  • 201.
  • 202.
    web server -client 5
  • 204.
    Express 6 ❏ É umframework web de node que prove features robustas para desenvolvimento web. ❏ Permite a criação de middlewares para responder às requests HTTP. ❏ Define uma tabela de roteamento que é usado para executar a ação diferente com base no Método HTTP e URL. ❏ Permite renderizar dinamicamente páginas HTML com base na passagem de argumentos para modelos.
  • 205.
    Express Install 6 ❏ instalaçãodo módulo: ❏ npm install express --save ❏ Quando se trabalha com express esses três modulos são importântes: ❏ npm install body-parser --save ❏ npm install cookie-parser --save ❏ npm install multer --save ❏ abrir pasta node_modules e confirmar as instalações
  • 206.
  • 207.
  • 208.
    Express - ServingStatic Files 7
  • 209.
    Express - ServingStatic Files 7
  • 210.
  • 211.
  • 212.
  • 213.
  • 214.
    Exemplo de Operações 9 OperaçãoHttp Method Resultado listUsers GET Mostrat todos os usuários salvos addUser POST adicionar novo usuário deleteUser DELETE remover usuário :id GET detalhes de um usuário especifico
  • 215.
    Exemplo de Operações- Base de Dados 9
  • 216.
  • 217.
    Exemplo de Operaçõs- Adicionar 9
  • 218.
  • 219.
  • 220.
  • 222.
  • 223.
  • 224.
  • 225.
  • 226.
  • 229.
    Instalação ❏ npm install-g mocha ❏ npm install mocha --save ❏ npm install chai --save
  • 230.
  • 231.
  • 232.
  • 233.
  • 234.
    Automate and enhanceyour workflow
  • 235.
    O que é? ❏ Automatizador - é uma ferramenta que ajuda a automatizar tarefas repetitivas ou demorados em no fluxo de trabalho de desenvolvimento como: ❏ concatenação de arquivos ❏ minificação ❏ testes ❏ Independente de plataforma - integrações são feitas em todos os principais IDEs pode ser usado com PHP, .NET, Node.js, Java e outras plataformas.
  • 236.
    Instalação 11 ❏ npm install--global gulp-cli ❏ instala de forma global o cliente do gulp ❏ npm install --save-dev gulp ❏ adiciona no projeto ❏ adicionar o arquivo gulpfile.js na raiz do projeto
  • 237.
    Dependências 11 ❏ npm installgulp-develop-server --save-dev ❏ npm install gulp-exec --save-dev ❏ npm install gulp-jshint --save-dev ❏ npm install jshint --save-dev ❏ npm install jshint-stylish --save-dev ❏ npm install gulp-util --save-dev ❏ npm install gulp-watch --save-dev
  • 238.
  • 239.
    gulpfile.js 11 ❏ task 'server:start'= gulp server:start ❏ inicia o node server.js ❏ task 'watch' = gulp watch ❏ verifica se a mudançar e starta o serviço novamente com as alterações ❏ task 'hint' = gulp hint ❏ executa lint nos arquivos *.js ❏ JSHint é uma ferramenta para detectar erros e potenciais problemas no código JavaScript e para impor convenções de codificação da sua equipe.
  • 241.
    O que é? ❏ O GruntJS é um “Task Runner”. ❏ Ele roda a partir do Terminal e serve para automatizar tarefas como: ❏ concatenação de scripts ❏ compilação ❏ minificação ❏ testes unitários ❏ linting
  • 242.
    Instalação 12 ❏ npm install-g grunt-cli ❏ instala de forma global o cliente do grunt ❏ npm install grunt --save-dev ❏ adiciona no projeto ❏ adicionar o arquivo Gruntfile.js na raiz do projeto ❏ O Gruntfile.js é o arquivo de configuração do Grunt. Nele você vai dizer tudo o que o Grunt deve fazer.
  • 243.
    Dependências 12 ❏ npm installgrunt-contrib-watch --save-dev ❏ npm install grunt-run --save-dev ❏ npm install grunt-mocha-test --save-dev
  • 244.
  • 245.
    Gruntfile.js 12 ❏ task 'run= grunt r ❏ inicia o node server.js ❏ task 'watch' = grunt w ❏ verifica se a mudançar e starta o serviço novamente com as alterações ❏ task 'mochaTest' = grun test ❏ executa todos os arquivos com testes de js
  • 247.
    Grunt ❏ Comunidade égrande ❏ mais de 5 mil plugins ❏ está algum tempo no mercado ❏ usado por grandes sites
  • 248.
    Gulp ❏ é maisrápido comparado ao grunt ❏ mais de 2 mil plugins ❏ usa mais código para gerar configuração
  • 249.
  • 251.
    O que é? ❏ O Bower é um projeto que permite gerenciar dependências client-side ❏ Em vez de ter que entrar no site de cada projeto que você quer usar e baixar os arquivos necessários, você pode automatizar este processo criando um arquivo de manifesto.
  • 252.
    Instalação 13 ❏ npm install-g bower ❏ instala de forma global o cliente do bower ❏ bower init ❏ configura um projeto bower ❏ após disso será gerado o arquivo bower.json
  • 253.
    Depenências do Bower 13 ❏bower install bootstrap --save ❏ bower install angular --save ❏ bower install jquery --save
  • 254.
  • 255.
  • 256.
    Pacotes do Bower Pesquisavisual : http://bower.io/search/ Pesquisa por comand line: ex: bower search angular Instalação de todos os pacotes no bower.js: bower install Atualização de pacotes : bower update jquery Remover pacote: bower unistall jquery
  • 258.
    O que é? ❏ jQuery é uma biblioteca JavaScript rápida e concisa criado em 2006 ❏ Simpifica o tratamento do HTML, manipulação de eventos, animação e interações Ajax no desenvolvimento web ❏ Tem o lema de escrever menos para fazer mais.
  • 259.
    Features ❏ Dom Manipulation ❏Event Handling ❏ Ajax support ❏ Animation ❏ Lightweight ❏ Cross Browser Support
  • 263.
    O que é? ❏ Bootstrap é um framework front-end que facilita a vida dos desenvolvedores web a criar sites com tecnologia mobile (responsivo) sem ter que digitar uma linha de CSS para “fazer e acontecer”. ❏ Bootstrap possui uma diversidade de componentes (plugins) em JavaScript (jQuery) que auxiliam o designer a implementar: ❏ tootlip ❏ menu-dropdown ❏ modal ❏ carousel ❏ slideshow ❏ entre outros ❏ Para isso é necessário apenas acrescentando algumas configurações no código, sem a necessidade de criar scripts.
  • 264.
    Por que usar? ❏ Mobile first approach - Possibilitar utilizar mesmos estilos para todos os dispositivos sem mudar arquivos ❏ Browser Support ❏ Easy to get started - Documentação muito boa ❏ Responsive design - CSS responsivo se ajusta para Desktops, Tablets and Mobiles
  • 265.
  • 266.
    Bootstrap Grid System ❏Pode ser considerado a parte mais importante do Bootstrap ❏ O grid system trabalha com até 12 colunas que se adaptam apropriadamente ao tamanho da tela de acordo com o dispositivo ❏ Possui classes pré definidas para opções de layouts específicos ou para ou mix de layouts
  • 267.
  • 268.
    Grid System -columns exemplo1 12 colunas em todos os dispositivos
  • 269.
    Grid System -offset exemplo2 Aumentar a margem esquerda de uma coluna onde essa coluna tem um intervalo de 1 a 11.
  • 270.
  • 271.
  • 272.
  • 273.
    Componentes buttons / dropbuttons tabs pagination navbar
  • 274.
  • 275.
  • 276.
    Boostrap + NodeJS+ Angular 14
  • 277.
    Boostrap + NodeJS+ Angular 14
  • 278.
    Boostrap + NodeJS+ Angular 14
  • 279.
    Boostrap + NodeJS+ Angular 14
  • 281.
    O que é? ❏ Browserify permite require ( 'modules') no navegador, através do agrupamento de todos os seus dependências. ❏ Browsers não tem o método require como Node.js. ❏ Com Browserify você pode escrever código da mesma forma que você iria usá-lo em Node.
  • 282.
    Onde ele Funciona? Browserify traz o que funciona no NodeJs para o Browser
  • 283.
  • 284.
  • 285.
  • 286.
  • 287.
    O que é? ❏ É uma biblioteca de UI desenvolvido no Facebook para facilitar a criação de componentes de interface do usuário interativa. ❏ Pode ser usado no client side e no server Side ❏ Usa um conceito chamado o DOM virtual ❏ Processa seletivamente partes do DOM, alterando somente estrutura e dados necessários.
  • 288.
    Virtual DOM (DocumentObject Model) ❏ Imagine que você tinha um objeto que você modelada em torno de um Carro. ❏ O React espelha esse objeto ❏ Agora nesse objeto espelhado de carro, eu adiciono novas rodas e um farol diferente ❏ Antes de aplicar essas alterações no carro o React realiza um diff e muda somente o que foi alterado.
  • 289.
    Virtual DOM (DocumentObject Model)
  • 290.
    Instalação $ npm install--save react react-dom $ bower install --save react
  • 291.
  • 292.
  • 293.
  • 294.
    Exemplo 2 -Reuso de Componentes
  • 295.
    Exemplo 3 -Propriedades
  • 296.
    Exemplo 4 -MarkDown
  • 297.
    Exemplo 4 -MarkDown
  • 299.
  • 300.
  • 301.
    Templates ❏ Os Templatedefinem partes reutilizáveis de DOM. ❏ Não será executada até que o conteúdo do Template seja realmente anexado ao DOM. ❏ Isso significa <img> não são baixados, os scripts não são executados até que seja necessário - há poupança de largura de banda e processamento. ❏ Tudo o que está em um Template é escondido em um querySelector assim os scripts em sua página não vai acidentalmente manipular o conteúdo original de outro Template.
  • 302.
  • 303.
    Shadow DOM ❏ Emcapsulateo conteúdo do DOM ❏ Deixa privado o JS/CSS para o HTML ❏ Permite criar trechos de nós de elementos de DOM que são independentes e isolados entre si, onde o estilo de um trecho não interfere com outro ❏ Suportado apenas por Chrome e Firefox ❏ Safari está implementando ❏ IE pra varias nem tentou implementar
  • 304.
    Shadow DOM -Exemplo ❏ Vamos pensar em uma tag <video>. ❏ Ele consiste de controles como o botão play, barra de progresso e os controles de volume. ❏ Cada um desses controles é implementado como um <div> dentro da tag <video> que na verdade não é acessível para as os scripts na página, mas é processado na tela usuários. ❏ Shadow DOM é uma ferramenta que vamos o desenvolvedor web criar a sua própria marcação e estilos escondido encapsulado da mesma forma em que <video> controles são feitos.
  • 305.
    Shadow DOM -Exemplo
  • 306.
    Custom Element ❏ CustomElements = Templates + Shadow DOM ❏ Podemos criar elementos de primeira classe como <body> <input> ❏ A idéia é encapsular tudo dentro de tags simples e mais fáceis de manusear. ❏ Reagem ao cliclo de vida do DOM
  • 307.
  • 308.
    HTML Imports ❏ Importaçõescarregar recursos externos, tais como Templates ou Custom Elements ❏ Um Custom Elements contido em um arquivo my-gravatar.html. ❏ Arquivos HTML importados podem conter Templates, stylesheets e scripts. ❏ Eles são executados quando a importação é carregado.
  • 309.
  • 311.
  • 313.
    O que é? ❏ Aplicações JavaScript que rodam tanto no client-side quanto no server-side ❏ Pode se gerar o html tanto no lado servidor quanto no lado do cliente ❏ Virtualmente usando exatamente o mesmo código em ambos os ambientes
  • 317.
    Benefício Facilidade para mantero código, reduz a duplicação de código Seach engine optimization - o Google pode rastrear aplicativos JavaScript em sites, problema criado por ter Single Page Mais rápido para processar o conteúdo HTML, diretamente no navegador. Melhor experiência geral do usuário. Mesmo Framework que roda cliet-side e server-side
  • 319.
  • 320.
    O que é? ❏ OpenComponents é um framework para desenvolver e distribuídas html components ❏ Ferramentas para facilitar o compartilhamento de código, reduzir dependências e facilmente abordar novos recursos. ❏ Os componentes são pequenas unidades de código isomórfico, constituídos principalmente por html, javascript, css. ❏ Podem conter logica no server-side (node.js) que pode ser usado para compor uma funcionalidade na client-side ❏ Renderização eles são peças de html puro para ser injetado em qualquer página html.
  • 321.
    Objetivo ❏ Permite queseja criado e publica novos componentes independentes ❏ Componentes de dados ❏ Que os consumidores possam ter um controle mais granular ❏ Versionamento de componentes imutáveis ❏ Otimizar a renderização do lado do cliente ❏ Performance ❏ Robustez ❏ A/B testing
  • 323.
  • 324.
  • 325.
  • 326.
    Pensar em dadose relaciomento com tables, joins
  • 327.
    Pensar em dados comoobjetos, grafos, JSON
  • 328.
    O que é? ❏ É uma linguagem de consulta de front-end para recuperar dados de back-end. ❏ Busca de dados e Manipulação de dados ❏ GraphQL.js fornece duas importantes capacidades: ❏ construir um type schema ❏ executar consultas nesse type schema. ❏ Pode ser utilizado para fazer agregação do lado do cliente
  • 331.
  • 332.
  • 333.
  • 335.
    Princípios ❏ O GraphQLnão foi pensado em fornecer dados através de urls ❏ Mas sim fornecer dados em Grafos de objetos e seus modelos ❏ A ideia é que as consultas e as respostas sejam construídas e retornadas ❏ A estrutura deve possuir uma hierarquia ❏ Impulsionada pelos requisitos da View e os engenheiros front-end ❏ GraphQL possibilita pensar nos requisitos e criar consultas em runtime
  • 336.
  • 337.
  • 338.
  • 339.
    O que é? ❏ Simples e poderoso gerenciador de estado para React, baseado na arquitetura Flux. ❏ Implementando com funções reativas de single- evente steam como : ❏ Obsevable ❏ ObservableState
  • 340.
    Por que ? ❏React é uma biblioteca de view component, não um framework web ❏ Ele processa o estado do aplicativo, mas não diz nada sobre como gerenciar esse estado através de sua aplicação. ❏ O estado pode ser definida em um componente raiz e passada para o resto da árvore por props. ❏ Quando é necessário passar estados por callback e props começa a ficar trabalhoso e complicado ❏ O fastflux gerencia esse tipo de estado
  • 341.
  • 342.
    Objetivo ❏ Legibilidade comestados ❏ Functional Reactive Programing core: ❏ tudo é observable ❏ functional trasformations: map,fliter reduce ❏ Incentiva o uso de ES6
  • 343.
  • 346.
    Como usar Hoje??? Os browsers não suportam todas as funcionalidades, para isso podemos utilizar o babel, que transforma o JavaScript na versão compatível com todos os browsers.
  • 347.
    Workshop: Front EndArchitecture e Tecnologias de Front End @salerno_rafael github.com/salerno-rafael