Arquitetura de uma aplicação web moderna - MVP ShowCast

36
Arquitetura de uma aplicação web moderna MVP ShowCast Virtual Community Series Victor Cavalcante MVP ASP.NET Lambda3 @vcavalcante Rodrigo Kono MVP ASP.NET MCP – MCTS – MCPD – MCT @rodrigokono

description

Apresentação realizada no MVP ShowCast 2013.

Transcript of Arquitetura de uma aplicação web moderna - MVP ShowCast

Page 1: Arquitetura de uma aplicação web moderna - MVP ShowCast

Arquitetura de uma aplicação web moderna

MVP ShowCastVirtual Community Series

Victor CavalcanteMVP ASP.NETLambda3 @vcavalcante

Rodrigo KonoMVP ASP.NETMCP – MCTS – MCPD – MCT@rodrigokono

Page 2: Arquitetura de uma aplicação web moderna - MVP ShowCast

MVP MicrosoftMCP – MCTS – MCPD – MCTFoco em desenvolvimento WEBDeveloper na LG SistemasFundador do DevGoiás.NETDez anos de comunidade .NET Palestrou em mais de 12 capitaisMais de 14.500 pessoas nesse tempoFinalista Imagine Cup 2005 – Brasil/Japão

Rodrigo Kono

@rodrigokono - www.rodrigokono.net – [email protected]

Page 3: Arquitetura de uma aplicação web moderna - MVP ShowCast

Antes de tudo...

• Náo há arquitetura “universalmente correta”.• Aquela que combina com cada cenário.

• Variação de acordo com a exigência e requisitos de projeto.

• Não iremos discutir “miolos” do design de software.

Page 4: Arquitetura de uma aplicação web moderna - MVP ShowCast

O cenário da web

• Divisão em duas bases distintas• O que funciona na infraestrutura (Server)

pode ser algo grande, escalável, em nuvem ou pode ser pequena e simples como um servidor interno de uma empresa.

• O que funciona no dispositivo do usuário final (Client)

aplicações que vão desde desktops, laptops, tablets, HDTV, impressoras,

smartphones, ou até mesmo uma geladeira

Page 5: Arquitetura de uma aplicação web moderna - MVP ShowCast
Page 6: Arquitetura de uma aplicação web moderna - MVP ShowCast

Um desafio constante

Equipes de desenvolvimento web

possuem a missão de fazer uma série de

decisões sobre a compatibilidade de

aplicações, desempenho, usabilidade e

facilidade de manutenção.

Page 7: Arquitetura de uma aplicação web moderna - MVP ShowCast

Código Base do cliente

Tipos de aplicações web• Aplicações HTML, comumente chamada

pelo navegador. Desenvolvida com HTML5, CSS3 e JS.

• Aplicações web Nativa, que são executadas diretamente do dispositivo. Desenvolvidas com SDKs.

Page 8: Arquitetura de uma aplicação web moderna - MVP ShowCast

O que temos para a web moderna?ResponsividadeCSS3Unobtrusive JavaScriptPolyfillsTranscompiladores de JSOtimização e PerformanceSegurança

Page 9: Arquitetura de uma aplicação web moderna - MVP ShowCast

Responsividade- Aplicações multi dispositivos

- Smarphone, Tablet, desktop, etc.- Uma única interface dá legibilidade e

acessibilidade específica para cada.- Interface sensitível.- Frameworks: Bootstrap e Foundation

Page 10: Arquitetura de uma aplicação web moderna - MVP ShowCast

CSS3

Media queries para renderizar páginas em diferentes tipos de dispositivos.<link rel="stylesheet" type="text/css" media="screen and (max-device-width: 480px) and (resolution: 163dpi)" href="Style.css" />

Manipulação dos objetos de interface mais inteligentes e com maior controle

Page 11: Arquitetura de uma aplicação web moderna - MVP ShowCast

// Esta regra será aplicada a todos os que têm o atributo “article" definido no h1h1[article]{ color:blue;}

// Esta regra será aplicada a todas h1 onde article = "title"h1[article="title"]{ color:blue;}

// Esta regra será aplicada a todos h1 onde artigo contém espaço// valores separados um dos quais é exatamente igual a "title"<h1 article="top title text"> Main Title </ h1>h1[article~="title"]{ color:blue;}

// Selecione todos os h1 onde atributo article começa com toph1[article^="top"]{ color:blue;}

// Selecione todos os h1 onde atributo article termina com toph1[article$="top"]{ color:blue;}

// Selecione todos os h1 onde atributo article tem um sub string toph1[article*="top"]{ color:blue;}

// Selecione todos os h1 onde atributo article contém valores separados por hífen e que começa com toph1[article|="top"]{ color:blue;}

Page 12: Arquitetura de uma aplicação web moderna - MVP ShowCast

LESS

O CSS3 pode ficar muito complexo e difícil de manipular.

Há a necessidade de pré-processadores de CSS como LESS e SASS.

- Estendem o CSS para um comportamento dinâmico utilizando variáveis, operações e funções

Page 13: Arquitetura de uma aplicação web moderna - MVP ShowCast

LESS

Por exemplo, você pode definir uma variável e o CSS resultante irá expandir essa variável.

http://lesscss.orghttp://sass-lang.com

Page 14: Arquitetura de uma aplicação web moderna - MVP ShowCast

O pulo do gato!

Page 15: Arquitetura de uma aplicação web moderna - MVP ShowCast

Inconformidade entre browsers

Problema:- Navegadores têm diferentes "estilos padrão" para os

elementos HTML.- Ex.: <sup>, <input>, <h1>, <h2>, <h3>...

Solução:- Usar usar Reset.css

(https://github.com/joshuaclayton/blueprint-css/blob/master/blueprint/src/reset.css) ou Normalize.css (http://necolas.github.io/normalize.css)

Aconselhável: usar o Normalize.css, que corrige styling e torna consistente em todos os navegadores.

Page 16: Arquitetura de uma aplicação web moderna - MVP ShowCast

Unobtruvise JavaScript(JavaScript Discreto)

Maneira de escrever JavaScript que funcione em diferentes dispositivos e que é de fácil manutenção.• Não usar manipuladores de eventos em linha.• Todo o código deve estar em um arquivo .js

externo.• Ser utilizável sem JavaScript.• Links existentes e forms são reutilizados.• Elementos JavaScript dependentes devem ser

dinamicamente adicionados à página

Page 17: Arquitetura de uma aplicação web moderna - MVP ShowCast

Unobtruvise JavaScript(JavaScript Discreto)// Não aplicável<input type="text" name="date" onchange="validateDate()" /><pre lang="jscript">function() { document.getElementById('date').onchange = validateDate;}

// Aplicável<input type="text" name="date" id="date" />window.onload = function() {window.onload = function() { document.getElementById('date').onchange = validateDate;};

Page 18: Arquitetura de uma aplicação web moderna - MVP ShowCast

Polyfills

- Pedaço de código que implementa os recursos que você espera que o navegador nativo suporte.

- Geralmente emula uma API mais recente que fornece a funcionalidade de fallback para navegadores mais antigos.

Page 19: Arquitetura de uma aplicação web moderna - MVP ShowCast

PolyfillsPor exemplo:Firefox 23, 24 e 25 não suportam HTML5 Web SQL Storage e IE8 e 9 não pode fazer CSS3 Transitions .Em ambos casos, um polyfills fornece uma alternativa para estes navegadores e fornece funcionalidade necessária.

Polyfills disponíveis: https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills

Você pode verificar o suporte ao navegador para HTML5 e CSS3 acessando http://caniuse.com

Page 20: Arquitetura de uma aplicação web moderna - MVP ShowCast

Modernizr

- Biblioteca JavaScript que detecta características HTML5 e CSS3 no navegador do usuário.

- Suporta dezenas de testes e, opcionalmente, inclui YepNope.js para carregamento condicional de externos.

- Ex.:Modernizr.load({ test: Modernizr.geolocation, yep : 'geo.js', nope: 'geo-polyfill.js'});

Page 21: Arquitetura de uma aplicação web moderna - MVP ShowCast

Minification

Processo para combinar vários arquivos CSS ou JavaScript, remover espaços em branco desnecessários e comentários. https://code.google.com/p/minify

Page 22: Arquitetura de uma aplicação web moderna - MVP ShowCast

RequireJs

O uso intenso de bibliotecas JavaScript resultou em carregamento de páginas com atraso. A página não será exibida até que todo o seu JavaScript seja baixado, o que provoca atrasos graves se não for adiada corretamente.

http://requirejs.org  

Page 23: Arquitetura de uma aplicação web moderna - MVP ShowCast

JavaScript

Escrever JavaScript pode ser um desafio para os recém-chegados e pode prejudicar ao invés de ajudar no desenvolvimento.

Projeto browser diet possui algumas dicas bacanas antes de sair por ai usando jQuery ou até mesmo codificando em JS.http://browserdiet.com/pt

Page 24: Arquitetura de uma aplicação web moderna - MVP ShowCast

TypeScript// TypeScript class Greeter { greeting: string; constructor(message: string) { this.greeting = message; } greet() { return "Hello, " + this.greeting; } }

// JavaScript var Greeter = (function () {function Greeter(message) { this.greeting = message;}Greeter.prototype.greet = function () { return "Hello, " + this.greeting;};return Greeter;})();

Page 26: Arquitetura de uma aplicação web moderna - MVP ShowCast

Código Base do Servidor

• Design de Software é crucial.• Utilizar a mesma aplicação de

negócios para a web e para smart clients é delicado.

• Desafio de testes unitários usando MVC.• MVP provou ser eficaz neste objetivo.

Page 27: Arquitetura de uma aplicação web moderna - MVP ShowCast

MVC x MVP

Page 28: Arquitetura de uma aplicação web moderna - MVP ShowCast

Deméritos do MVC

• Não é possível Unit Test• UI intimamente ligada com a

controladora, pode ter boa parte da regra de negócios.

• Distribuição de fluxo de trabalho é quase impossível.

Page 29: Arquitetura de uma aplicação web moderna - MVP ShowCast

O MVP

• Distribuição do fluxo de trabalho entre Designer (UI) e Developer

• View está desassociada do Presenter e Modelo

• Ajuda uma aplicação smart client a usar um presenter comum ao modelo.

• É possível fazer unit test.• Presenter contém lógica de negócios e

referência ao modelo.

Page 30: Arquitetura de uma aplicação web moderna - MVP ShowCast

Arquitetura Física

Page 31: Arquitetura de uma aplicação web moderna - MVP ShowCast

Alternativa ao MVP/MVC: MVVM

MVVM: Model-View-ViewModelBaseado em MVC e MVPTeve origem na MicrosoftSepara de maneira mais clara a regra de negócio de UI de outras regras e comportamentos através de data-bindings declarativos.

Page 32: Arquitetura de uma aplicação web moderna - MVP ShowCast

Imagem: http://msdn.microsoft.com/en-us/magazine/jj694937.aspx

Page 33: Arquitetura de uma aplicação web moderna - MVP ShowCast

http://knockoutjs.com

Page 34: Arquitetura de uma aplicação web moderna - MVP ShowCast

Arquitetura da UI

Page 35: Arquitetura de uma aplicação web moderna - MVP ShowCast

Recomendações

Page 36: Arquitetura de uma aplicação web moderna - MVP ShowCast

MVP ShowCastVirtual Community Series

© 2013 Rodrigo Kono, MVP. All rights reserved. Microsoft, and other product names are or may be registered trademarks and/or trademarks in the Brazil. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a

commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation.

Rodrigo Kono@rodrigokono

Victor Cavalcante

@vcavalcante