Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

ASP .NET MVC

Apresentação sobre o padrão ASP .NET MVC
by

Parllen Baldo

on 11 October 2012

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of ASP .NET MVC

ASP.NET MVC Padrão MVC Model -View-Controller
Primeira Implementação
1979 - Xerox - Trygve Reenskaug - SmallTalk Atualiza Model View Controller Manipula Link entre o usuário e o sistema.
Trata os comandos do usuário.
Direciona o sistema da maneira esperada. Dados e estados dos mesmos.
Quando ocorrem mudanças em um Model, o mesmo atualiza sua view. "Burra".
Apresenta as informações providas pelo Model. ASP .NET MVC 3 Controller Model View Manipula Atualiza Controllers Rotas Regitradas no Application_start
Direciona requests para os controllers corretos Parâmetros Actions ActionResults ActionFilters Existe um controller chamado home? Existe uma action chamado index? Requisitar URL: NÃO? Métodos públicos em um Controller
Responsáveis por tratar as requisições feitas.
Podem ser especificadas como Post ou Get Actions Parâmetros podem ser passados de várias maneiras diferentes: Actions sem parâmetros: Query String: RouteData: ActionLink Javascript Sem UpdatePanel!!! "Interceptadores"
Executam em vários momentos durante a execução de uma action
Pode-se criar filters customizados.
Podem ser a nível de Action, Controllers ou Globais. Definem qual o tipo de resultado uma action terá.
Em 90% dos casos será uma "ViewResult"
Customizáveis
Facilitam testes de unidade
Lida com o objeto Response, gerando o output correspondente com o ActionResult utilizado. Action Results RedirectResult FileResult JSONResult Action Filters Authorize Exception Filters Action Filters Result Filters MODEL ModelBinding Criação de objetos CLR a partir de dados contidos em um Request HTTP
Dados podem ser encontrados em vários lugares, como na QueryString e na Rota
Pode-se customizar ModelBinders específicos para cada necessidade Validation Model Binding ModelBinders Implementam a interface IModelBinder DefaultMoldelBinder É usado pelo action invoker quando este não encontra um binder customizado para o tipo em questão.
Por padrão, o DefaultModelBinder procura em quatro lugares: Model Binding Binding de Tipos Simples Neste caso, o model binder (padrão) tenta converter a string obtida no tipo do parâmetro usando a classe System.ComponentModel.TypeDescriptor.
Caso o valor não possa ser convertido, passando uma string para um inteiro por exemplo, o model binder não encontrará o modelo, levantando uma exceção IMPORTANTE!! CULTURE!! Dependendo de onde se encontrar os seus dados, para o model binder padrão serão culture insensitive.
Dados em query string e nas rotas devem estar em formato universal, aaaa-mm-dd para datas.
Dados de forms devem estar no formato configurado no servidor.
Dados em formato errado não serão convertidos, levantando a exceção citada acima. Model Binding Binding de Tipos Complexos DefaultModelBinder usa reflection para fazer o binding de objetos complexos O binder varre a classe obtendo suas propriedades.
Se o tipo da propriedade for primitivo, o binder irá varrer o request por uma propriedade com o mesmo nome.
Se for um tipo complexo, repete-se o processo. Model Binding HTML "Easy to bind" Helpers HTML geram tags HTML que facilitam a varredura do request por propriedades. Model Binding Selective binding Permite selecionar quais propriedades do modelo serão incluídas/excluídas do bind: Model Binding Binding Arrays e Collections ModelBinder é inteligente o suficiente para agrupar dados com o mesmo nome: Neste caso o método poderia receber vários tipos de parâmetros, desde uma List<string> exemplificada acima, a um array de strings. Model Binding Binding Collections de Objetos complexos Como o DataBinder resolveria o caso anterior para uma List<Person>? Model Binding Invocando o ModelBinder Manualmente É possível através do método UpdateModel()
Útil quando usa-se Dependency Injection no model
Pode-se restringir a fonte de dados (Form, Route, etc)
Transfere a responsabilidade de tratar os erros de binding ocorridos para o desenvolvedor. Garante que os dados recebidos são compatíveis com o modelo
Validação feita por Data Annotations
Validações Sever Side e Client Side Model Validation Validação Explícita Validação do model na própria action
Utiliza-se o método ModelState.AddModelError para adicionar os erros encontrados no modelo.
Para verificar se o modelo é válido após as validações realizadas, utiliza-se a propriedade ModelState.IsValid
Encoraja a repetição de código
Mensagens de erro podem ser apresentadas em um ValidationSummary Model Validation Validação no ModelBinder O model binder padrão oferece métodos que podemos sobrescrever para executar validações Model Validation Validação por MetaData Garante que a validação de um modelo ocorra sempre da mesma maneira. Evitando repetições de código Model Validation Self-Validating Models Quando a própria classe do model possui sua lógica de validação
A classe deve implementar a interface IValidatableObject e seu método Validate
Retorna um IEnumerable de ValidationResult, onde cada um contém uma mensagem de erro
Método de validação é chamada após o binder preencher suas propriedades
Como a validação por MetaData, evita a repetição de código Model Validation Validação Client Side Unotrusive. Regras de validação são adicionadas com oatributos HTML, o script que realiza a validação fica em uma biblioteca separada
Caso o browser não suporte javascript, ou o usuário o tenha desabilitado, a validação será realizada server-side sem trabalho adicional Model Validation Validação Client Side Para habilitar, deve-se alterar as seguintes chaves no web.config: Deve-se também referenciar os seguintes scripts: Model Validation Validação Client Side A maneira mais simples de se realizar validação client side é através de MetaData, os mesmos utilizados para validação server side Os mesmos atributos usados para realizar validação client side são usados para validação server side, o que permite que em um ambiente em que o javascript não seja habilitado a validação ainda ocorra corretamente. Construída a partir da jQuery Validarion Library Custom attributes devem implementar a interface IClientValidatable para poderem ter validação client side Model Validation Validação Client Side Customizada Extende a jQuery validation para suprir necessidades especiais Requer que um custom attribute seja escrito para realizar a validação. Requer escrita de código JavaScript Model Validation Validação Remota Validação em que um JS faz uma chamada de uma action que realiza a validação Pode ser mesclada com client side validation. Somente os campos que tiverem este tipo de validação irão ao serivdor minimizando o impacto em desempenho Actions que realizam validação remota devem retornar um JSONResult Nome do parâmetro da action deve ser o mesmo da propriedade a ser validada View Responsáveis pela apresentação dos dados providos no model
Idealmente não devem conter nenhum tipo de lógica de aplicação.
Existem várias engines para produção de código para views
Aspx (web forms)
Razor
Spark
NHaml Razor (@) O que é uma view engine? View engine é o componente que irá renderizar HTML a partir do código escrito em sua sintaxe ASP .NET MVC3 apresentou o Razor como uma nova View engine, com sintaxe simples e fácil de ler Apesar de desnecessário, é possível criar uma view engine própria Código das views é compilado no momento em que a aplicação se inicia, as classes compiladas podem ser acessadas na pasta Temporary ASP.NET Files Razor (@) View engines podem gerar conteúdo dinâmico, seu output é gerado em runtime, podendo variar a cada request O quadro abaixo indica as diferentes maneiras possíveis de se gerar conteúdo: Inline Code Código c# precedido de uma @
Permite a inclusão de lógica de aplicação dentro de uma view - ERRADO
Usado também para inclusão de namespaces em uma View
Outra opção é importar os namespaces no web.config da pasta Views
Razor codifica todo conteúdo apos uma '@' em HTML, para proteger contra ataques XSS Inline Code Views podem ser fortemente tipadas através da tag @model TIPADA DINÂMICA HTML Helpers Métodos providos pelo ASP .NET MVC para gerar atributos HTML
Evitam a repetição de código HTML
Podem ser "inline", inclusos no próprio fonte das views, ou externos
Inline helpers podem ser reutilizados se postos em um arquivo dentro da pasta App_Code
External Helpers são feitos para serem reutilizáveis, são classes em c# com extension methods de helpers existentes Helpers Nativos O ASP .NET MVC oferece HTML helpers nativos com dois objetivos principais:
Gerar elementos HTML corriqueiros para acelerar a codificação de Views
Forms
Inputs
Hidden
Facilitar o model binding, pois geram "Easy-to-Bind" HTML Sections "Regiões de conteúdo"
Definidas pela tag @section
Permitem controlar o que será renderizado e onde
São renderizadas através do método RenderSection()
O que não fizer parte de uma section será renderizado na chamada do método RenderBody() Partial Views Estão para views assim como um Ascx está para um Aspx na plataforma webforms, sem a proliferação de Page_Loads.
Assim como Views normais, podem ser (e devem, na maioria dos casos) fortemente tipadas.
O model que irá suprir a partial view parte da View "mãe" Child Actions Actions invocadas de dentro de uma view
Tipicamente associadas com a renderização de uma partial view
O Atributo ChildActionOnly marca uma action com child, e não permite que a mesma seja usada de maneira diferente
Child actions não podem realizar ações de redirecionamento Injeção de Dependência - DI para composição de objetos/desacoplar
- DI para atingir o Open Closed Principle
- DI para gerenciar o ciclo de vida dos objetos
- DI para implementar AOP Injeção de Dependência - Testes de Unidade
- Stub
- Mock
- Single Responsibility Principle
- Open Closed Principle
- Liskov Substitution Principle
- Interface Segregation Principle
- Dependency Inversion Principle
- Decorator
- AOP
- DRY
- Null Object
- Singleton
- Lifestyle
- Dependency Injection no MVC
- Service Locator anti-pattern
Full transcript