Introdução Felipe Fujiy. Tecnologias Web PeríodoTecnologiaVantagensDesvantagens JurássicoCommon...

Post on 18-Apr-2015

106 views 1 download

Transcript of Introdução Felipe Fujiy. Tecnologias Web PeríodoTecnologiaVantagensDesvantagens JurássicoCommon...

Introdução

Felipe Fujiy

Tecnologias WebPeríodo Tecnologia Vantagens Desvantagens

Jurássico Common GatewayInterface (CGI)*

SimplesFlexívelÚnica opção na época

Roda fora do servidor, lento, cria um processo por chamada.

Era do bronze Microsoft InternetDatabase Connector(IDC)

Roda dentro do servidor

Somente uma camada para queries SQL

1996 Active Server Pages (ASP)

Propósito Geral Interpretado, código espaguete

2002/03 ASP.NET 1.0/1.1

Compilado, IU “Stateful”, Vasta Infra-estrutura, Orientação à Objetos

Pesado(tráfego), HTML “sujo”, Intestável2005 ASP.NET 2.0

2007 ASP.NET AJAX

2008 ASP.NET 3.5

WebFormsVantagens

RADRich ControlsViewStateFácilJavascript “automático”

WebFormsDesvantagens

ViewStateNão há controle sobre o HTMLNão é testávelNão impõe o uso de Design PatternsNão há separação de responsabilidadesPage Life Cycle

MVCVantagens

Separação de Responsabilidades(SoC)Controle sobre o HTML geradoTestávelSEOFácil integração com frameworks JavaScript(jQuery)Não há ViewState/PostbackSegue a natureza StateLess da WebExtensívelIntegração “limpa” com AjaxOportunidade de aprender novos conceitosOpen Source

MVCDesvantagens

Exige mais do desenvolvedorInicialmente exige mais tempoNão há Rich ControlsNão há tanto “material”

Quando usar MVC - PolíticoTempo do projeto deve permitirTime maduroTime disposto ao desafioTime motivado a aprenderTime possui cultura de testes

Fonte: http://unplugged.giggio.net/unplugged/post/Webcast-de-ASPNet-MVC-introdutorio-com-o-Codificando-apresentacao.aspx

Quando usar MVC - TécnicoControle sobre o HTMLFoco em padrões de projetos e arquiteturaFlexibilidadeFoco em bons princípios de programação:

KISS(Keep it simple, stupid), DRY (don´t repeat yourself)

SEOFonte: http://unplugged.giggio.net/unplugged/post/Webcast-de-ASPNet-MVC-introdutorio-com-o-Codificando-apresentacao.aspx

Ciclo de VidaA tabela de rotas é criadaO UrlRoutingModule intercepta o Request e

determina a rotaO MvcHandler é ativado e cria o controlador

esperadoA ação do controller é executadaAlgum dado do modelo é obtidoO método View é chamado e uma View é

criadaA View renderiza

Fonte: http://unplugged.giggio.net/unplugged/post/Webcast-de-ASPNet-MVC-introdutorio-com-o-Codificando-apresentacao.aspx

Modelo

Interface Controller->ViewViewDataTempDataModel (Tipado)

HTML HelpersActionLink()BeginForm()EndForm()CheckBox()DropDownList()Hidden()ListBox()Password()RadioButton()TextArea()TextBox()Encode()<a href="<%= Url.Action("Delete") %>"><img

src=“del.png“ /></a>

Pontos de AtençãoAcceptVerbs ([AcceptVerbs(HttpVerbs.Post)])ActionName ([ActionName("Index")])HandleUnknownActionValidateInput ([ValidateInput(false)])[Bind(Exclude="Id")]

(Create([Bind(Exclude="Id")]Product product))

Html.Encode para evitar JavaScript Injection

ModelBinder Nos primeiros Previews do ASP.NET MVC só era possível receber tipos

primitivos como argumento dos métodos. Com o uso dos ModelBinders você pode receber um objeto complexo.

Os ModelBinder são classes que implementam o IModelBinder. Pode-se criar um ModelBinder para cada tipo, ou criar um para uso geral.

Os ModelBinder podem ser registrados de 4 formas, na seguinte ordem: Como um atributo do argumento:

Como um atributo no tipo do argumento:

Registrar no ModelBinders.Binders no Start da aplicação Registrar no ModelBinders.Binders. DefaultBinder da aplicação:

ModelStateO ModelState é parte do ViewData, usado para o

Controller indicar à View que há erros no modelo passado à ela.

Além disso, graças aos ModelState, quando o usuário envia um formulário com dados inválidos, e o formulário é re-apresentado, os dados digitados anteriormente não são perdidos.

Podemos programar o Controller para adicionar itens no ModelState, mas geralmente esse trabalho fica no ModelBinder e UpdateModel(usando o ModelBinder) que faz isso automaticamente.

IDataErrorInfo, usado para configurar as mensagens de erro

Repository Pattern/IoCController:

Controller Factory:

Dependency InjectionDependency Injection ou Injeção de Dependência é uma

forma de Inversion of Control(Inversão de controle).Injeção de dependência é um padrão de

desenvolvimento utilizado quando é necessário manter baixo o nível de acoplamento entre diferentes módulos de um sistema. Nesta solução as dependências entre os módulos não são definidas programaticamente, mas sim pela configuração de uma infraestrutura de software (container) que é responsável por "injetar" em cada componente suas dependências declaradas. (Wikipedia).

Útil nos testes unitários, onde trocamos o Repositório que acessa o banco de dados por um Mock, que retorna dados falsos, assim conseguimos testar apenas o nosso método, sem depender do banco de dados.

Testes Unitários

Anti-Forgery Tokens Seu cliente está logado no seu banco (www.banco.com), e entra em um

site que tem a seguinte imagem: <img src=”http://www.banco.com/sacar/?valor=9999” />.

Com isso o método sacar vai ser executado, roubando 9999 reais da conta do seu cliente.

Para validar as chamadas às Actions existe o atributo [ValidateAntiForgeryToken]:

Se o método tiver este atributo só vai executar caso receba o Token de validação.

Suas páginas com link para o método deve ter o Token, para isso use o: <%= Html.AntiForgeryToken() %>

Será gerado algo como: <input name="__RequestVerificationToken" type="hidden" value="6tbg3PWU9oAD3bhw6jZwxrYRyWPhKede87K/PFgaw6MI3huvHgpjlCcPzDzrTkn8" />

Linkshttp://blog.fujiy.net/http://www.fujiy.net/overflow/http://www.asp.net/mvc/http://weblogs.asp.net/scottgu/http://www.javafree.org/artigo/871453/