SlideShare uma empresa Scribd logo
1 de 347
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Tornando o Xamarin.Forms ainda melhor com Prism
Tornando o Xamarin.Forms ainda melhor com PrismTornando o Xamarin.Forms ainda melhor com Prism
Tornando o Xamarin.Forms ainda melhor com Prismakamud
 
Separando a regra de negócios do Rails
Separando a regra de negócios do RailsSeparando a regra de negócios do Rails
Separando a regra de negócios do RailsCelso Crivelaro
 
O rad da wave maker developing for the cloud
O rad da wave maker developing for the cloudO rad da wave maker developing for the cloud
O rad da wave maker developing for the cloudFrancisco Gonçalves
 
Campus Party 2014 - Desenvolvimento Web com ASP.NET
Campus Party 2014 - Desenvolvimento Web com ASP.NETCampus Party 2014 - Desenvolvimento Web com ASP.NET
Campus Party 2014 - Desenvolvimento Web com ASP.NETEduardo Pires
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento webRodrigo Rodrigues
 
Vue.js - o framework progressivo
Vue.js - o framework progressivoVue.js - o framework progressivo
Vue.js - o framework progressivoVinicius Reis
 
Service Oriented Front-End Architecture
Service Oriented Front-End ArchitectureService Oriented Front-End Architecture
Service Oriented Front-End ArchitectureCristiano Gomes
 
Uma visão geral da estratégia de middleware da Microsoft
Uma visão geral da estratégia de middleware da MicrosoftUma visão geral da estratégia de middleware da Microsoft
Uma visão geral da estratégia de middleware da MicrosoftOsvaldo Daibert
 
Apresentação ti pdf
Apresentação ti pdfApresentação ti pdf
Apresentação ti pdflanepb
 
Web Sphere Application Server
Web Sphere Application ServerWeb Sphere Application Server
Web Sphere Application ServerFabricio Carvalho
 
REST: Padrões e Melhores Práticas
REST: Padrões e Melhores PráticasREST: Padrões e Melhores Práticas
REST: Padrões e Melhores PráticasAlessandro Oliveira
 
Vue.js - Framwork Progressivo
Vue.js - Framwork ProgressivoVue.js - Framwork Progressivo
Vue.js - Framwork ProgressivoBruno Santana
 
Treinamento WebSphere 6.1 Administration
Treinamento WebSphere 6.1 AdministrationTreinamento WebSphere 6.1 Administration
Treinamento WebSphere 6.1 AdministrationGustavo Concon
 

Mais procurados (19)

Tornando o Xamarin.Forms ainda melhor com Prism
Tornando o Xamarin.Forms ainda melhor com PrismTornando o Xamarin.Forms ainda melhor com Prism
Tornando o Xamarin.Forms ainda melhor com Prism
 
Separando a regra de negócios do Rails
Separando a regra de negócios do RailsSeparando a regra de negócios do Rails
Separando a regra de negócios do Rails
 
O rad da wave maker developing for the cloud
O rad da wave maker developing for the cloudO rad da wave maker developing for the cloud
O rad da wave maker developing for the cloud
 
Visão Geral sobre Angular JS
Visão Geral sobre Angular JSVisão Geral sobre Angular JS
Visão Geral sobre Angular JS
 
Campus Party 2014 - Desenvolvimento Web com ASP.NET
Campus Party 2014 - Desenvolvimento Web com ASP.NETCampus Party 2014 - Desenvolvimento Web com ASP.NET
Campus Party 2014 - Desenvolvimento Web com ASP.NET
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento web
 
Vue.js - o framework progressivo
Vue.js - o framework progressivoVue.js - o framework progressivo
Vue.js - o framework progressivo
 
Service Oriented Front-End Architecture
Service Oriented Front-End ArchitectureService Oriented Front-End Architecture
Service Oriented Front-End Architecture
 
Ria
RiaRia
Ria
 
Uma visão geral da estratégia de middleware da Microsoft
Uma visão geral da estratégia de middleware da MicrosoftUma visão geral da estratégia de middleware da Microsoft
Uma visão geral da estratégia de middleware da Microsoft
 
Apresentação ti pdf
Apresentação ti pdfApresentação ti pdf
Apresentação ti pdf
 
IBM WebSphere Portal
IBM WebSphere PortalIBM WebSphere Portal
IBM WebSphere Portal
 
Angular js
Angular jsAngular js
Angular js
 
Web Sphere Application Server
Web Sphere Application ServerWeb Sphere Application Server
Web Sphere Application Server
 
Microservices
MicroservicesMicroservices
Microservices
 
REST: Padrões e Melhores Práticas
REST: Padrões e Melhores PráticasREST: Padrões e Melhores Práticas
REST: Padrões e Melhores Práticas
 
Vue.js - Framwork Progressivo
Vue.js - Framwork ProgressivoVue.js - Framwork Progressivo
Vue.js - Framwork Progressivo
 
Estudo de caso ASP.NET MVC e Silverlight
Estudo de caso ASP.NET MVC e SilverlightEstudo de caso ASP.NET MVC e Silverlight
Estudo de caso ASP.NET MVC e Silverlight
 
Treinamento WebSphere 6.1 Administration
Treinamento WebSphere 6.1 AdministrationTreinamento WebSphere 6.1 Administration
Treinamento WebSphere 6.1 Administration
 

Destaque

SOFEA: Service Oriented Front End Architecture, Next Gen Web Architecture for...
SOFEA: Service Oriented Front End Architecture, Next Gen Web Architecture for...SOFEA: Service Oriented Front End Architecture, Next Gen Web Architecture for...
SOFEA: Service Oriented Front End Architecture, Next Gen Web Architecture for...Kunal Ashar
 
Sofea in a soa ecosystem v0 4
Sofea in a soa ecosystem v0 4Sofea in a soa ecosystem v0 4
Sofea in a soa ecosystem v0 4Ganesh Prasad
 
Sofea and SOUI - Web future without web frameworks
Sofea and SOUI - Web future without web frameworksSofea and SOUI - Web future without web frameworks
Sofea and SOUI - Web future without web frameworksAndré Neubauer
 
Application Architecture: The Next Wave | MuleSoft
Application Architecture: The Next Wave | MuleSoftApplication Architecture: The Next Wave | MuleSoft
Application Architecture: The Next Wave | MuleSoftMuleSoft
 
Service Oriented UI Architecture in the world of web, desktop, & mobile appli...
Service Oriented UI Architecture in the world of web, desktop, & mobile appli...Service Oriented UI Architecture in the world of web, desktop, & mobile appli...
Service Oriented UI Architecture in the world of web, desktop, & mobile appli...Axway Appcelerator
 
Porque você deveria usar IONIC
Porque você deveria usar IONICPorque você deveria usar IONIC
Porque você deveria usar IONICDan Jesus
 
Ionic + Cordova para Desenvolvimento Mobile
Ionic + Cordova para Desenvolvimento MobileIonic + Cordova para Desenvolvimento Mobile
Ionic + Cordova para Desenvolvimento MobileWaldyr Felix
 
architecture of mobile software applications
architecture of mobile software applicationsarchitecture of mobile software applications
architecture of mobile software applicationsHassan Dar
 
Life above the service tier preso v1 0
Life above the service tier preso v1 0Life above the service tier preso v1 0
Life above the service tier preso v1 0Ganesh Prasad
 
Evolução das arquiteturas para aplicações Web
Evolução das arquiteturas para aplicações WebEvolução das arquiteturas para aplicações Web
Evolução das arquiteturas para aplicações WebBreno Vitorino
 
Life above the_service_tier_v1.1
Life above the_service_tier_v1.1Life above the_service_tier_v1.1
Life above the_service_tier_v1.1Ganesh Prasad
 
Usando PushWoosh com Ionic Framework
Usando PushWoosh com Ionic FrameworkUsando PushWoosh com Ionic Framework
Usando PushWoosh com Ionic FrameworkEmerson Thompson
 
Managing computational resources with Apache Mesos
Managing computational resources with Apache MesosManaging computational resources with Apache Mesos
Managing computational resources with Apache MesosJackson dos Santos Olveira
 

Destaque (20)

SOFEA: Service Oriented Front End Architecture, Next Gen Web Architecture for...
SOFEA: Service Oriented Front End Architecture, Next Gen Web Architecture for...SOFEA: Service Oriented Front End Architecture, Next Gen Web Architecture for...
SOFEA: Service Oriented Front End Architecture, Next Gen Web Architecture for...
 
Sofea in a soa ecosystem v0 4
Sofea in a soa ecosystem v0 4Sofea in a soa ecosystem v0 4
Sofea in a soa ecosystem v0 4
 
Sofea and SOUI - Web future without web frameworks
Sofea and SOUI - Web future without web frameworksSofea and SOUI - Web future without web frameworks
Sofea and SOUI - Web future without web frameworks
 
Application Architecture: The Next Wave | MuleSoft
Application Architecture: The Next Wave | MuleSoftApplication Architecture: The Next Wave | MuleSoft
Application Architecture: The Next Wave | MuleSoft
 
Service Oriented UI Architecture in the world of web, desktop, & mobile appli...
Service Oriented UI Architecture in the world of web, desktop, & mobile appli...Service Oriented UI Architecture in the world of web, desktop, & mobile appli...
Service Oriented UI Architecture in the world of web, desktop, & mobile appli...
 
Porque você deveria usar IONIC
Porque você deveria usar IONICPorque você deveria usar IONIC
Porque você deveria usar IONIC
 
Ionic + Cordova para Desenvolvimento Mobile
Ionic + Cordova para Desenvolvimento MobileIonic + Cordova para Desenvolvimento Mobile
Ionic + Cordova para Desenvolvimento Mobile
 
architecture of mobile software applications
architecture of mobile software applicationsarchitecture of mobile software applications
architecture of mobile software applications
 
Life above the service tier preso v1 0
Life above the service tier preso v1 0Life above the service tier preso v1 0
Life above the service tier preso v1 0
 
PhoneGap - Desenvolvimento mobile multiplataforma - SECCOMP 2014
PhoneGap - Desenvolvimento mobile multiplataforma - SECCOMP 2014PhoneGap - Desenvolvimento mobile multiplataforma - SECCOMP 2014
PhoneGap - Desenvolvimento mobile multiplataforma - SECCOMP 2014
 
Aceleracao+conteudo+dinamico
Aceleracao+conteudo+dinamicoAceleracao+conteudo+dinamico
Aceleracao+conteudo+dinamico
 
Evolução das arquiteturas para aplicações Web
Evolução das arquiteturas para aplicações WebEvolução das arquiteturas para aplicações Web
Evolução das arquiteturas para aplicações Web
 
Life above the_service_tier_v1.1
Life above the_service_tier_v1.1Life above the_service_tier_v1.1
Life above the_service_tier_v1.1
 
Usando PushWoosh com Ionic Framework
Usando PushWoosh com Ionic FrameworkUsando PushWoosh com Ionic Framework
Usando PushWoosh com Ionic Framework
 
Arquitetura de sistemas web
Arquitetura de sistemas webArquitetura de sistemas web
Arquitetura de sistemas web
 
Managing computational resources with Apache Mesos
Managing computational resources with Apache MesosManaging computational resources with Apache Mesos
Managing computational resources with Apache Mesos
 
Apache mahout - introduction
Apache mahout - introductionApache mahout - introduction
Apache mahout - introduction
 
Introduction to CFEngine
Introduction to CFEngineIntroduction to CFEngine
Introduction to CFEngine
 
Docker hub
Docker hubDocker hub
Docker hub
 
Vagrant
VagrantVagrant
Vagrant
 

Semelhante a Front end architecture

Introdução ao desenvolvimento da web.pptx
Introdução ao desenvolvimento da web.pptxIntrodução ao desenvolvimento da web.pptx
Introdução ao desenvolvimento da web.pptxMarceloRosenbrock1
 
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin -...
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin -...O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin -...
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin -...E-Commerce Brasil
 
Do MVP ao PWA, melhorando o engajamento com cliente na CVC
Do MVP ao PWA, melhorando o engajamento com cliente na CVCDo MVP ao PWA, melhorando o engajamento com cliente na CVC
Do MVP ao PWA, melhorando o engajamento com cliente na CVCJanderson Silva
 
Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Valmir Justo
 
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...iMasters
 
ANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDA
ANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDAANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDA
ANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDAWilson Mendes
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento WebSérgio Souza Costa
 
Apresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemApresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemRodrigo Valerio
 
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e KotlinO uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e KotlinDavid Robert Camargo de Campos
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sitesthiagolima
 
MSP Tech Days Online 2018 - SPA além do JavaScript com Blazor
MSP Tech Days Online 2018 - SPA além do JavaScript com BlazorMSP Tech Days Online 2018 - SPA além do JavaScript com Blazor
MSP Tech Days Online 2018 - SPA além do JavaScript com BlazorGustavo Bellini Bigardi
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.Filipe Morelli
 
Pangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformPangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformAndré Paulovich
 
Progressive web apps
Progressive web appsProgressive web apps
Progressive web appsJoão Maciel
 
Desenvolvimento web com software livre
Desenvolvimento web com software livreDesenvolvimento web com software livre
Desenvolvimento web com software livreRuan Carvalho
 
Desenvolvimento web com Software Livre
Desenvolvimento web com Software LivreDesenvolvimento web com Software Livre
Desenvolvimento web com Software LivreRuan Carvalho
 

Semelhante a Front end architecture (20)

Introdução ao desenvolvimento da web.pptx
Introdução ao desenvolvimento da web.pptxIntrodução ao desenvolvimento da web.pptx
Introdução ao desenvolvimento da web.pptx
 
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin -...
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin -...O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin -...
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin -...
 
Do MVP ao PWA, melhorando o engajamento com cliente na CVC
Do MVP ao PWA, melhorando o engajamento com cliente na CVCDo MVP ao PWA, melhorando o engajamento com cliente na CVC
Do MVP ao PWA, melhorando o engajamento com cliente na CVC
 
Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.Desenvolvimento web - conceitos, tecnologia e tendências.
Desenvolvimento web - conceitos, tecnologia e tendências.
 
Blazor #SnetTalks3
Blazor  #SnetTalks3Blazor  #SnetTalks3
Blazor #SnetTalks3
 
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
 
ANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDA
ANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDAANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDA
ANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDA
 
Aula09 - Java Script
Aula09 - Java ScriptAula09 - Java Script
Aula09 - Java Script
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento Web
 
Apresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemApresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvem
 
JavaEE
JavaEEJavaEE
JavaEE
 
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e KotlinO uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sites
 
MSP Tech Days Online 2018 - SPA além do JavaScript com Blazor
MSP Tech Days Online 2018 - SPA além do JavaScript com BlazorMSP Tech Days Online 2018 - SPA além do JavaScript com Blazor
MSP Tech Days Online 2018 - SPA além do JavaScript com Blazor
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
Pangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformPangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud Platform
 
Progressive web apps
Progressive web appsProgressive web apps
Progressive web apps
 
Desenvolvimento web com software livre
Desenvolvimento web com software livreDesenvolvimento web com software livre
Desenvolvimento web com software livre
 
Desenvolvimento web com Software Livre
Desenvolvimento web com Software LivreDesenvolvimento web com Software Livre
Desenvolvimento web com Software Livre
 

Mais de Rafael Salerno de Oliveira

TDC - Qual o tamanho adequado de um micro serviço?
TDC - Qual o tamanho adequado de um micro serviço?TDC - Qual o tamanho adequado de um micro serviço?
TDC - Qual o tamanho adequado de um micro serviço?Rafael Salerno de Oliveira
 
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsComo automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsRafael Salerno de Oliveira
 
Domain driven design com functional programing(f#)
Domain driven design com functional programing(f#)Domain driven design com functional programing(f#)
Domain driven design com functional programing(f#)Rafael Salerno de Oliveira
 

Mais de Rafael Salerno de Oliveira (20)

TDC - Qual o tamanho adequado de um micro serviço?
TDC - Qual o tamanho adequado de um micro serviço?TDC - Qual o tamanho adequado de um micro serviço?
TDC - Qual o tamanho adequado de um micro serviço?
 
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsComo automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
 
Aws route 53
Aws route 53Aws route 53
Aws route 53
 
Aws Network Introduction
Aws Network Introduction Aws Network Introduction
Aws Network Introduction
 
Aws system manager
Aws system managerAws system manager
Aws system manager
 
Clean code
Clean codeClean code
Clean code
 
Kontena
KontenaKontena
Kontena
 
Docker cloud
Docker cloudDocker cloud
Docker cloud
 
Domain driven design com functional programing(f#)
Domain driven design com functional programing(f#)Domain driven design com functional programing(f#)
Domain driven design com functional programing(f#)
 
Virtual box
Virtual boxVirtual box
Virtual box
 
Serf
SerfSerf
Serf
 
V8 Google
V8 GoogleV8 Google
V8 Google
 
Thinking in systems
Thinking in systemsThinking in systems
Thinking in systems
 
Design pattern for mobile Android IOS
Design pattern for mobile Android IOSDesign pattern for mobile Android IOS
Design pattern for mobile Android IOS
 
Batoo jpa
Batoo jpaBatoo jpa
Batoo jpa
 
Hammock Driven Development
Hammock Driven DevelopmentHammock Driven Development
Hammock Driven Development
 
Responsibility Driven Design
Responsibility Driven DesignResponsibility Driven Design
Responsibility Driven Design
 
Service Design Patterns - Study Case
Service Design Patterns - Study Case  Service Design Patterns - Study Case
Service Design Patterns - Study Case
 
Hammock Driven Design
Hammock Driven DesignHammock Driven Design
Hammock Driven Design
 
Monads functional group
Monads   functional groupMonads   functional group
Monads functional group
 

Front end architecture

  • 1. Workshop: Front End Architecture e Tecnologias de Front End @salerno_rafael github.com/salerno-rafael
  • 3. 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
  • 5.
  • 6. 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
  • 7.
  • 8.
  • 9.
  • 12. Devem mudar mas atendendo o prometido
  • 13.
  • 14.
  • 15.
  • 16. Por que lembrado de SOA ???
  • 18. Por que não fazer o mesmo na UI ???
  • 19.
  • 21. Estudar o passado para mudar o futuro
  • 22. Como é Hoje?? Tipos de Arquiteturas de Web App tinhamos?
  • 23. Tipos de Arquiteturas de 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
  • 26.
  • 27. 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)
  • 29. 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
  • 30. AJAX
  • 31. MVC = Web Templating Engines
  • 32. Processo das Web Applications JSP/JSF/PHP/etc..
  • 33. 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
  • 34. 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
  • 36.
  • 37.
  • 38. Por que não posso usar simplesmente os novos Frameworks ????
  • 39.
  • 40. ❏ 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
  • 41.
  • 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. SPA
  • 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
  • 46.
  • 47. 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
  • 48.
  • 49.
  • 50.
  • 52.
  • 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
  • 54.
  • 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. Protótipo de implementação de SOFEA Client
  • 57. BFF - Backends for Frontends Pattern
  • 58. 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
  • 59. Como é hoje outra 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
  • 62. 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
  • 63. BFF Tempos de Release podem ser diferentes. Equipes são diferentes.
  • 64. BFF ❏ Nasceu para cuidar dos diversos consumidores que temos hoje para um único sistema, onde cada um deles tem uma necessidade.
  • 66. Chamada de muitos Services ❏ Agregador de chamadas ❏ Paralelizar chamadas ❏ Para mobile reduz o consumo de bateria e banda
  • 67. 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.
  • 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
  • 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
  • 72.
  • 74. IDEs
  • 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)
  • 77. O que estão querendo resolver ?
  • 79.
  • 80. ➢ 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 ?
  • 81. ➢ 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
  • 83. 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
  • 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 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…..
  • 86. 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
  • 87. Expressions ➢ São utilizado para fazer o bind dos dados com o HTML ➢ Expressions são escritos com double braces {{ expression}}
  • 88. Modules - exemplo - HTML 1
  • 90. 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
  • 91. 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
  • 94. ng-show Será mostrado somente se o elemento da exepressao tiver valor = true 3
  • 97. ng-hide Diretiva utilizada para esconder alguma coisa de acordo com a propriedade 4
  • 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 de acordo com o array (FOR) 5
  • 102. Filter | (PIPE) - combina a saída do primeiro elemento com o segundo 6
  • 104. Execício 3 ➢ Adicionar mais valores dentro do JSON de produtos ➢ Utilizar a diretive ngRepeate para mostrar todos os produtos ➢ Aplicar filters
  • 106. ng-src como está no contexto angular sem a diretiva ng- src a imagem não é carregada 7
  • 107. 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
  • 109. Events
  • 110. 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.
  • 111. Execício 4 ➢ Adicionar images dentro do JSON ➢ Mostrar a imagem no HTML ➢ Utilizar ng-click para esconder as Tabs ➢ Utilizar ng-class
  • 115. Execício 5 ➢ Criar um 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-6 col-xs-offset-2"> https://github.com/salerno-rafael/angularJs-exemplo.git
  • 118. 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
  • 121. Execício 6 ➢ Criar um novo controller para comentário ➢ Adicionar diretiva ng-submit ➢ Buscar valores de comentários do novo controller
  • 122. Form validations 12 marcar com required campos que deseja ser validado evita que o form seja enviado sem estar válido
  • 123. 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
  • 124. Execício 6.1 ➢ Validar form ➢ Css para validação
  • 125. 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
  • 126. Execício 6.2 ➢ Criar um novo html com conteúdo de: ○ nome do produto ○ button para comprar produto
  • 127. Custom Directive 14 ❏ Deixar mais 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
  • 130. Execício 7 ➢ Criar uma diretiva de Elemento e Atributo com nome de produto e botão para compra
  • 132. Custom Directive - Controllers 15
  • 133.
  • 134. Custom Directive - Controllers 15
  • 135. Cuidado com o Saco de Gato
  • 136. Execício 8 ➢ Criar uma custom diretiva para controller
  • 137.
  • 138. Dependência 16 ❏ Servem para criar modulos por funcionalidade ❏ Quem fica declarado no ng-app é o modulo de nível mais alto
  • 142. Execício 8.1 ➢ Colocar o novo controller em um arquivo js ➢ Injetar esse novo arquivo chamado panel.js
  • 143. 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
  • 144. 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.
  • 147. Execício 9 ➢ Criar um novo index.html e um novo app.js ➢ Testar o ng-template comforme o exemplo anterior
  • 148. Scope 19 Scope é um objeto do Javascript que compartilha estado os controllers e suas views.
  • 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
  • 154. 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
  • 155. Clean Code Angular https://github.com/johnpapa/angular-styleguide ❖ Nomenclatura de arquivos ❖ Estrutura de pacotes ❖ Single Responsability ❖ Tratamento de Erros ❖ Etc
  • 156.
  • 157.
  • 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 ❏
  • 167. Execício 11 ➢ Criar testes para a página de produtos
  • 168.
  • 169.
  • 170. Modulo
  • 171. Mock
  • 173. Execício 12 ➢ Criar testes para o módulo
  • 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 ❏ Event Driven ❏ Single Threaded but Highly Scalable ❏ Very Fast - Google Chrome's V8 JavaScript Engine
  • 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 -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
  • 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. Server executar o comando node main.js 1
  • 182. Execício 1 ➢ Criar testes um server node e abrir na porta 3000
  • 183. 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
  • 184. 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
  • 186. Execício 2 ➢ executar o 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 ➢ fazer uma função para leitura de arquivo de forma síncrona ➢ fazer uma função para ler de forma assíncrona
  • 189. 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
  • 192. Streams ❏ Streams são objetos que permitem ler dados de uma fonte ou gravar dados para um destino em forma contínua.
  • 196. Execício 5 ➢ Implementar o stream de leitura do arquivo input. txt ➢ implementar o stream de write para o arquivo ouput.txt
  • 197.
  • 202. web server - client 5
  • 203.
  • 204. 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.
  • 205. 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
  • 208. Express - Serving Static Files 7
  • 209. Express - Serving Static Files 7
  • 210. Execício ➢ implementar server node com statics
  • 214. 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
  • 215. Exemplo de Operações - Base de Dados 9
  • 216. Exemplo de Operações - Listar 9
  • 217. Exemplo de Operaçõs - Adicionar 9
  • 218. Exemplo de Operações - Detalhe 9
  • 219. Exemplo de Operações - Delete 9
  • 221.
  • 227.
  • 228.
  • 229. Instalação ❏ npm install -g mocha ❏ npm install mocha --save ❏ npm install chai --save
  • 231. Classe
  • 234. Automate and enhance your 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 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
  • 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.
  • 240.
  • 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 install grunt-contrib-watch --save-dev ❏ npm install grunt-run --save-dev ❏ npm install grunt-mocha-test --save-dev
  • 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
  • 246.
  • 247. Grunt ❏ Comunidade é grande ❏ mais de 5 mil plugins ❏ está algum tempo no mercado ❏ usado por grandes sites
  • 248. Gulp ❏ é mais rápido comparado ao grunt ❏ mais de 2 mil plugins ❏ usa mais código para gerar configuração
  • 250.
  • 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
  • 256. 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
  • 257.
  • 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
  • 260.
  • 261.
  • 262.
  • 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
  • 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
  • 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.
  • 272. Div
  • 273. Componentes buttons / drop buttons tabs pagination navbar
  • 275. Sites que usam Boostrap
  • 276. Boostrap + NodeJS + Angular 14
  • 277. Boostrap + NodeJS + Angular 14
  • 278. Boostrap + NodeJS + Angular 14
  • 279. Boostrap + NodeJS + Angular 14
  • 280.
  • 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
  • 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 (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.
  • 289. Virtual DOM (Document Object Model)
  • 290. Instalação $ npm install --save react react-dom $ bower install --save react
  • 294. Exemplo 2 - Reuso de Componentes
  • 295. Exemplo 3 - Propriedades
  • 296. Exemplo 4 - MarkDown
  • 297. Exemplo 4 - MarkDown
  • 298.
  • 299. O que é ?
  • 301. 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.
  • 303. 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
  • 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 ❏ 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
  • 307. Custom Element - Exemplo
  • 308. 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.
  • 309. HTML Imports - Exemplo
  • 310.
  • 312.
  • 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
  • 314.
  • 315.
  • 316.
  • 317. 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
  • 318.
  • 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 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
  • 322.
  • 323. Open Components - Exemplo
  • 324. Open Components - Exemplo
  • 326. Pensar em dados e relaciomento com tables, joins
  • 327. Pensar em dados como objetos, 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
  • 329.
  • 330.
  • 334.
  • 335. 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
  • 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
  • 342. Objetivo ❏ Legibilidade com estados ❏ Functional Reactive Programing core: ❏ tudo é observable ❏ functional trasformations: map,fliter reduce ❏ Incentiva o uso de ES6
  • 344.
  • 345.
  • 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 End Architecture e Tecnologias de Front End @salerno_rafael github.com/salerno-rafael