front end architecture

347
Workshop: Front End Architecture e Tecnologias de Front End @salerno_rafael github.com/salerno-rafael

Upload: rafael-salerno-de-oliveira

Post on 07-Jan-2017

726 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Front end architecture

Workshop: Front End Architecture e Tecnologias de Front End

@salerno_rafael github.com/salerno-rafael

Page 2: Front end architecture

Conteúdo

Page 3: Front end architecture

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

Page 4: Front end architecture

Relembrado SOA

Page 5: Front end architecture
Page 6: Front end architecture

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árioEvoluir aos poucos não precisa chegar na perfeição na versão 1

Serviços compartilhados

Objetivos estratégicospriorizar a realização de longo prazo e os objetivos estratégicos de negócios

Valor de NegócioNã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

Page 7: Front end architecture
Page 8: Front end architecture
Page 9: Front end architecture
Page 10: Front end architecture

Separação de Conceitos

Page 11: Front end architecture

Poucas dependências

Page 12: Front end architecture

Devem mudar mas atendendo o prometido

Page 13: Front end architecture
Page 14: Front end architecture
Page 15: Front end architecture
Page 16: Front end architecture

Por que lembrado de SOA ???

Page 17: Front end architecture

Problema

Page 18: Front end architecture

Por que não fazer o mesmo na UI ???

Page 19: Front end architecture
Page 20: Front end architecture

Como podemos mudar ?

Page 21: Front end architecture

Estudar o passado para mudar o futuro

Page 22: Front end architecture

Como é Hoje?? Tipos de Arquiteturas de Web App tinhamos?

Page 23: Front end architecture

Tipos de Arquiteturas de Web App Utilizadas

❏ Web Templating Engines

❏ MVC Frameworks

Page 24: Front end architecture

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

Page 25: Front end architecture

Web Templating Engines

Page 26: Front end architecture
Page 27: Front end architecture

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)

Page 28: Front end architecture

MVC Frameworks

Page 29: Front end architecture

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

Page 30: Front end architecture

AJAX

Page 31: Front end architecture

MVC = Web Templating Engines

Page 32: Front end architecture

Processo das Web Applications

JSP/JSF/PHP/etc..

Page 33: Front end architecture

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

Page 34: Front end architecture

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

Page 35: Front end architecture

Onde queremos chegar

Page 36: Front end architecture
Page 37: Front end architecture
Page 38: Front end architecture

Por que não posso usar simplesmente os novos Frameworks ????

Page 39: Front end architecture
Page 40: Front end architecture

❏ 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

Page 41: Front end architecture
Page 42: Front end architecture

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

Page 43: Front end architecture

SPA

Page 44: Front end architecture

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

Page 45: Front end architecture

Single Page Applications

Page 46: Front end architecture
Page 47: Front end architecture

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

Page 48: Front end architecture
Page 49: Front end architecture
Page 50: Front end architecture
Page 51: Front end architecture

Lembram dos processo web???

Page 52: Front end architecture
Page 53: Front end architecture

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

Page 54: Front end architecture
Page 55: Front end architecture

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

Page 56: Front end architecture

Protótipo de implementação de SOFEA Client

Page 57: Front end architecture

BFF - Backends for Frontends Pattern

Page 58: Front end architecture

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

Page 59: Front end architecture

Como é hoje outra visão

Page 60: Front end architecture

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

Page 61: Front end architecture

Problema

Page 62: Front end architecture

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

Page 63: Front end architecture

BFF

Tempos de Release podem ser diferentes.Equipes são diferentes.

Page 64: Front end architecture

BFF

❏ Nasceu para cuidar dos diversos consumidores que temos hoje para um único sistema, onde cada um deles tem uma necessidade.

Page 65: Front end architecture

BFF - Mobile

Page 66: Front end architecture

Chamada de muitos Services

❏ Agregador de chamadas❏ Paralelizar chamadas❏ Para mobile reduz o consumo de

bateria e banda

Page 67: Front end architecture

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.

Page 68: Front end architecture

Reuso de BFF

❏ Agregando de chamadas a um mesmo serviço

❏ Mesma funcionalidade em dois BFFs diferente

Page 69: Front end architecture

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

Page 70: Front end architecture

Evolução com BFF

Page 71: Front end architecture

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

Page 72: Front end architecture
Page 73: Front end architecture

Single Page Applications - Tools

Page 74: Front end architecture

IDEs

Page 75: Front end architecture

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)

Page 77: Front end architecture

O que estão querendo resolver ?

Page 78: Front end architecture

Solução

Page 79: Front end architecture
Page 80: Front end architecture

➢ 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 ?

Page 81: Front end architecture

➢ 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

Page 82: Front end architecture

Core Features

Page 83: Front end architecture

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

Page 84: Front end architecture

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

Page 85: Front end architecture

É 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…..

Page 86: Front end architecture

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

Page 87: Front end architecture

Expressions➢ São utilizado para fazer o bind dos dados com o HTML

➢ Expressions são escritos com double braces {{ expression}}

Page 88: Front end architecture

Modules - exemplo - HTML

1

Page 89: Front end architecture

Modules - exemplo - JS

1

Page 90: Front end architecture

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

Page 91: Front end architecture

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

Page 92: Front end architecture

ng-controllers - exemplo JS

2

Page 93: Front end architecture

ng-controllers - exemplo HTML

Scope

Page 94: Front end architecture

ng-show

Será mostrado somente se o elemento da exepressao tiver valor = true

3

Page 95: Front end architecture

ng-show - exemplo

3

Page 96: Front end architecture

ng-if

3

Page 97: Front end architecture

ng-hide

Diretiva utilizada para esconder alguma coisa de acordo com a propriedade

4

Page 98: Front end architecture

ng-hide - exemplo

4

Page 99: Front end architecture

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

Page 100: Front end architecture

ng-repeat

Repete a seção de acordo com o array (FOR)

5

Page 101: Front end architecture

ng-repeat

5

Page 102: Front end architecture

Filter

| (PIPE) - combina a saída do primeiro elemento com o segundo

6

Page 103: Front end architecture

Filter

6

Page 104: Front end architecture

Execício 3

➢ Adicionar mais valores dentro do JSON de produtos

➢ Utilizar a diretive ngRepeate para mostrar todos os produtos

➢ Aplicar filters

Page 105: Front end architecture

ng-src

7

Page 106: Front end architecture

ng-srccomo está no contexto angular sem a diretiva ng-src a imagem não é carregada

7

Page 107: Front end architecture

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

Page 108: Front end architecture

ng-click - complete

9

Page 109: Front end architecture

Events

Page 110: Front end architecture

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.

Page 111: Front end architecture

Execício 4

➢ Adicionar images dentro do JSON

➢ Mostrar a imagem no HTML

➢ Utilizar ng-click para esconder as Tabs

➢ Utilizar ng-class

Page 112: Front end architecture

Organizar

Page 113: Front end architecture

Organizar com ng-controller

10

Page 114: Front end architecture

Organizar com ng-controller

10

Page 115: Front end architecture

Execício 5

➢ Criar um novo controller

➢ Passar a logica de tabs para o controller

Page 116: Front end architecture

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.

Page 117: Front end architecture

Ajustes

<meta charset="UTF-8">

<div class="col-xs-6 col-xs-offset-2">

https://github.com/salerno-rafael/angularJs-exemplo.git

Page 118: Front end architecture

ng-submit

11

definição da função que é chamada no submit no app.jsUm controller para toda a funcionalidade

Permite chamar uma função do controller quando é submetido

Page 119: Front end architecture

ng-submit

11

Page 120: Front end architecture

ng-submit

11

Page 121: Front end architecture

Execício 6

➢ Criar um novo controller para comentário

➢ Adicionar diretiva ng-submit

➢ Buscar valores de comentários do novo controller

Page 122: Front end architecture

Form validations

12

marcar com required campos que deseja ser validado

evita que o form seja enviado sem estar válido

Page 123: Front end architecture

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 digitarng-pristine: valida antes de digitar

Page 124: Front end architecture

Execício 6.1

➢ Validar form

➢ Css para validação

Page 125: Front end architecture

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-name\AppData\Local\Google\Chrome\Application- chrome.exe --allow-file-access-from-files

Page 126: Front end architecture

Execício 6.2

➢ Criar um novo html com conteúdo de:○ nome do produto○ button para comprar produto

Page 127: Front end architecture

Custom Directive

14

❏ Deixar mais expressivo❏ Chamar eventos ❏ Adicionar logica❏ Reusar componentes comuns

Page 128: Front end architecture

Custom Directive

14

restrict = E -> define diretiva como elemento

restrict = A -> define diretiva como atributo

app.directive -> define como a diretiva vai funcionar

Page 129: Front end architecture

ng-include vs custom

Page 130: Front end architecture

Execício 7

➢ Criar uma diretiva de Elemento e Atributo com nome de produto e botão para compra

Page 131: Front end architecture

Organizar os Controllers

Page 132: Front end architecture

Custom Directive - Controllers

15

Page 133: Front end architecture
Page 134: Front end architecture

Custom Directive - Controllers

15

Page 135: Front end architecture

Cuidado com o Saco de Gato

Page 136: Front end architecture

Execício 8

➢ Criar uma custom diretiva para controller

Page 137: Front end architecture
Page 138: Front end architecture

Dependência

16

❏ Servem para criar modulos por funcionalidade

❏ Quem fica declarado no ng-app é o modulo de nível mais alto

Page 139: Front end architecture

Dependência

16

Page 140: Front end architecture

Dependência

16

Page 141: Front end architecture

Dependência

16

Page 142: Front end architecture

Execício 8.1

➢ Colocar o novo controller em um arquivo js

➢ Injetar esse novo arquivo chamado panel.js

Page 143: Front end architecture

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

Page 144: Front end architecture

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.

Page 145: Front end architecture

ng-template - $routerProvider

18

Page 146: Front end architecture

18

= classe java

Métodos do java

Page 147: Front end architecture

Execício 9

➢ Criar um novo index.html e um novo app.js

➢ Testar o ng-template comforme o exemplo anterior

Page 148: Front end architecture

Scope

19

Scope é um objeto do Javascript que compartilha estado os controllers e suas views.

Page 149: Front end architecture

Scope

19

Page 150: Front end architecture

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

Page 151: Front end architecture

Callback

Page 152: Front end architecture

Services

17

Page 153: Front end architecture

Services exemplo 2

17

Page 154: Front end architecture

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

Page 155: Front end architecture

Clean Code Angular

https://github.com/johnpapa/angular-styleguide

❖ Nomenclatura de arquivos❖ Estrutura de pacotes❖ Single Responsability ❖ Tratamento de Erros❖ Etc

Page 156: Front end architecture
Page 157: Front end architecture
Page 158: Front end architecture

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.

Page 159: Front end architecture

Instalação

❏ npm install -g jasmine

❏ Ou donwload do pacote e adicionar os JS no projeto

❏ https://github.com/jasmine/jasmine❏

Page 160: Front end architecture

Exemplo

Page 161: Front end architecture

Exemplo

Page 162: Front end architecture

Exemplo

Page 163: Front end architecture

Exemplo

Page 164: Front end architecture

Exemplo

Page 165: Front end architecture

Exemplo

Page 166: Front end architecture

Exemplo

Page 167: Front end architecture

Execício 11

➢ Criar testes para a página de produtos

Page 168: Front end architecture
Page 169: Front end architecture
Page 170: Front end architecture

Modulo

Page 171: Front end architecture

Mock

Page 172: Front end architecture

Resultado

Page 173: Front end architecture

Execício 12

➢ Criar testes para o módulo

Page 175: Front end architecture

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

Page 176: Front end architecture

Features

❏ Asynchronous

❏ Event Driven

❏ Single Threaded but Highly Scalable

❏ Very Fast - Google Chrome's V8 JavaScript Engine

Page 177: Front end architecture

Quem Usa ?

Page 178: Front end architecture

Quando Usar ?

❏ I/O bound Applications

❏ Data Streaming Applications

❏ Data Intensive Real time Applications (DIRT)

❏ JSON APIs based Applications

❏ Single Page Applications

Page 179: Front end architecture

Checking Installation

node -v deve ser igual a v4.2.6npm -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

Page 180: Front end architecture

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

Page 181: Front end architecture

Server

executar o comando node main.js 1

Page 182: Front end architecture

Execício 1

➢ Criar testes um server node e abrir na porta 3000

Page 183: Front end architecture

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

Page 184: Front end architecture

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

Page 185: Front end architecture

package.json

Page 186: Front end architecture

Execício 2

➢ executar o comando npm init para criar um package.json

Page 187: Front end architecture

Callbacks

❏ Node é single threaded application, mas pode suportar concorrência via event e callbacks.

2

Page 188: Front end architecture

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

Page 189: Front end architecture

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

Page 190: Front end architecture

Events

3

Page 191: Front end architecture

Execício 4

➢ Implementar o events

Page 192: Front end architecture

Streams

❏ Streams são objetos que permitem ler dados de uma fonte ou gravar dados para um destino em forma contínua.

Page 193: Front end architecture

Streams - Read

4

Page 194: Front end architecture

Streams - Write

4

Page 195: Front end architecture

Streams - Pipe

4

Page 196: Front end architecture

Execício 5

➢ Implementar o stream de leitura do arquivo input.txt

➢ implementar o stream de write para o arquivo ouput.txt

Page 197: Front end architecture
Page 198: Front end architecture

Socket.io Exemplo

https://github.com/salerno-rafael/nodejs/tree/master/chat-example

Page 199: Front end architecture

web server

Page 200: Front end architecture

web server

Page 201: Front end architecture

web server

5

Page 202: Front end architecture

web server - client

5

Page 203: Front end architecture
Page 204: Front end architecture

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.

Page 205: Front end architecture

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

Page 206: Front end architecture

Express

6

Page 207: Front end architecture

Express - Operações

6

Page 208: Front end architecture

Express - Serving Static Files

7

Page 209: Front end architecture

Express - Serving Static Files

7

Page 210: Front end architecture

Execício

➢ implementar server node com statics

Page 211: Front end architecture

Express - Form

8

Page 212: Front end architecture

Express - Form

8

Page 213: Front end architecture

Serviços

A

B

C

Page 214: Front end architecture

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

Page 215: Front end architecture

Exemplo de Operações - Base de Dados

9

Page 216: Front end architecture

Exemplo de Operações - Listar

9

Page 217: Front end architecture

Exemplo de Operaçõs - Adicionar

9

Page 218: Front end architecture

Exemplo de Operações - Detalhe

9

Page 219: Front end architecture

Exemplo de Operações - Delete

9

Page 220: Front end architecture

Execício

➢ implementar serviço de form

Page 221: Front end architecture
Page 222: Front end architecture

Estrutura de pastas

10

Page 223: Front end architecture

10

Dados no Serviço

Page 224: Front end architecture

10

Dados no Serviço

Page 225: Front end architecture

10

Angular recebendo dados

Page 226: Front end architecture

Execício

➢ implementar node + angular

Page 227: Front end architecture
Page 228: Front end architecture
Page 229: Front end architecture

Instalação

❏ npm install -g mocha

❏ npm install mocha --save

❏ npm install chai --save

Page 230: Front end architecture

Unit-Test

Page 231: Front end architecture

Classe

Page 232: Front end architecture

Unit-Test

Page 233: Front end architecture

Resultado

Page 234: Front end architecture

Automate and enhance your workflow

Page 235: Front end architecture

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.

Page 236: Front end architecture

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

Page 237: Front end architecture

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

Page 238: Front end architecture

gulpfile.js

11

Page 239: Front end architecture

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.

Page 240: Front end architecture
Page 241: Front end architecture

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

Page 242: Front end architecture

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.

Page 243: Front end architecture

Dependências

12

❏ npm install grunt-contrib-watch --save-dev❏ npm install grunt-run --save-dev❏ npm install grunt-mocha-test --save-dev

Page 244: Front end architecture

Gruntfile.js

12

Page 245: Front end architecture

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

Page 246: Front end architecture
Page 247: Front end architecture

Grunt

❏ Comunidade é grande❏ mais de 5 mil plugins❏ está algum tempo no mercado❏ usado por grandes sites

Page 248: Front end architecture

Gulp

❏ é mais rápido comparado ao grunt❏ mais de 2 mil plugins❏ usa mais código para gerar configuração

Page 249: Front end architecture

Config das mesmas Tasks

Page 250: Front end architecture
Page 251: Front end architecture

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.

Page 252: Front end architecture

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

Page 253: Front end architecture

Depenências do Bower

13

❏ bower install bootstrap --save❏ bower install angular --save❏ bower install jquery --save

Page 254: Front end architecture

bower.js

13

Page 255: Front end architecture

Referências no HTML

13

Page 256: Front end architecture

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

Page 257: Front end architecture
Page 258: Front end architecture

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.

Page 259: Front end architecture

Features

❏ Dom Manipulation

❏ Event Handling

❏ Ajax support

❏ Animation

❏ Lightweight

❏ Cross Browser Support

Page 260: Front end architecture
Page 261: Front end architecture
Page 262: Front end architecture
Page 263: Front end architecture

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.

Page 264: Front end architecture

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

Page 265: Front end architecture

Boostrap Parts

Page 266: Front end architecture

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

Page 267: Front end architecture

Grid System

exemplo1

Page 268: Front end architecture

Grid System - columns

exemplo1

12 colunas em todos os dispositivos

Page 269: Front end architecture

Grid System - offset

exemplo2

Aumentar a margem esquerda de uma coluna onde essa coluna tem um intervalo de 1 a 11.

Page 270: Front end architecture

Div

exemplo3

Page 271: Front end architecture

exemplo3

Div

Page 272: Front end architecture

Div

Page 273: Front end architecture

Componentes

buttons / drop buttons

tabs

pagination

navbar

Page 274: Front end architecture

Componentes

labels

Page 275: Front end architecture

Sites que usam Boostrap

Page 276: Front end architecture

Boostrap + NodeJS + Angular

14

Page 277: Front end architecture

Boostrap + NodeJS + Angular

14

Page 278: Front end architecture

Boostrap + NodeJS + Angular

14

Page 279: Front end architecture

Boostrap + NodeJS + Angular

14

Page 280: Front end architecture
Page 281: Front end architecture

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.

Page 282: Front end architecture

Onde ele Funciona ?

Browserify traz o que funciona no NodeJs para o Browser

Page 283: Front end architecture

Exemplo

Page 284: Front end architecture

Exemplo

Page 285: Front end architecture

Compatibilidade

Page 287: Front end architecture

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.

Page 288: Front end architecture

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.

Page 289: Front end architecture

Virtual DOM (Document Object Model)

Page 290: Front end architecture

Instalação

$ npm install --save react react-dom

$ bower install --save react

Page 291: Front end architecture

Exemplo

Page 292: Front end architecture

Exemplo

Page 293: Front end architecture

Exemplo 1

Page 294: Front end architecture

Exemplo 2 - Reuso de Componentes

Page 295: Front end architecture

Exemplo 3 - Propriedades

Page 296: Front end architecture

Exemplo 4 - MarkDown

Page 297: Front end architecture

Exemplo 4 - MarkDown

Page 298: Front end architecture
Page 299: Front end architecture

O que é ?

Page 300: Front end architecture

"Isso vai revolucionar a Web!"

Page 301: Front end architecture

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.

Page 302: Front end architecture

Templates - Exemplo

Page 303: Front end architecture

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

Page 304: Front end architecture

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.

Page 305: Front end architecture

Shadow DOM - Exemplo

Page 306: Front end architecture

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

Page 307: Front end architecture

Custom Element - Exemplo

Page 308: Front end architecture

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.

Page 309: Front end architecture

HTML Imports - Exemplo

Page 310: Front end architecture
Page 311: Front end architecture

Quem implementa?

Page 312: Front end architecture
Page 313: Front end architecture

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

Page 314: Front end architecture
Page 315: Front end architecture
Page 316: Front end architecture
Page 317: Front end architecture

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

Page 318: Front end architecture
Page 319: Front end architecture

Open Components Framework

Page 320: Front end architecture

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.

Page 321: Front end architecture

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

Page 322: Front end architecture
Page 323: Front end architecture

Open Components - Exemplo

Page 324: Front end architecture

Open Components - Exemplo

Page 325: Front end architecture

GraphQL

Page 326: Front end architecture

Pensar em dados e relaciomento com tables, joins

Page 327: Front end architecture

Pensar em dados como objetos, grafos, JSON

Page 328: Front end architecture

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

Page 329: Front end architecture
Page 330: Front end architecture
Page 331: Front end architecture

Exemplo de Query

Page 332: Front end architecture

Exemplo de Resultado

Page 333: Front end architecture

Exemplo Implementação

Page 334: Front end architecture
Page 335: Front end architecture

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

Page 336: Front end architecture

Tipos de Comunicação

Page 337: Front end architecture

GraphQL Server APP

Exemplo

Page 338: Front end architecture

FastFlux

Page 339: Front end architecture

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

Page 340: Front end architecture

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

Page 341: Front end architecture

Quando Usar ?

Page 342: Front end architecture

Objetivo

❏ Legibilidade com estados

❏ Functional Reactive Programing core:❏ tudo é observable❏ functional trasformations: map,fliter reduce

❏ Incentiva o uso de ES6

Page 343: Front end architecture

ECMAScripts

Page 344: Front end architecture
Page 345: Front end architecture
Page 346: Front end architecture

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.

Page 347: Front end architecture

Workshop: Front End Architecture e Tecnologias de Front End

@salerno_rafael github.com/salerno-rafael