Padrões de design – exemplos de padrões MVC para iniciantes

0

Ele explica o que é padrão MVC e o que é ASP.NET MVC Framework como ele funciona. Também explica o ciclo de vida da página ASP.NET MVC e os recursos do ASP.NET MVC em termos de versão.

As amostras forneceram etapas sábias para ajudar os iniciantes a entender facilmente e se tornar proficientes em ASP.NET MVC.

Como todos nós conhecemos muitos padrões de design e os usamos na implementação de componentes e serviços de negócios em nossos aplicativos, ainda enfrentaremos problemas/desafios com nossos aplicativos. Além disso, as necessidades e prioridades de negócios do dia a dia estarão mudando. Se observarmos de perto uma série de problemas, defeitos e desafios que enfrentamos, é na interface do usuário e nas camadas de apresentação. Embora alguns defeitos estejam relacionados à lógica de negócios e às regras de negócios, talvez seja necessário corrigi-los na interface do usuário e nas camadas de apresentação, pois podemos integrar a lógica de negócios nas camadas de interface do usuário e apresentação. A razão por trás disso é que não focamos na implementação do padrão de design correto em nossos aplicativos. Vamos seguir passo a passo e entender como implementar e usar o padrão de apresentação em nossas aplicações.

Declaração do problema:
  1. Já usando padrões diferentes no aplicativo, mas ainda mantendo o aplicativo é difícil.
  2. Usando VS Test, NUnit, MBUnit etc para testar a camada de lógica de negócios, mas ainda existem alguns defeitos no aplicativo como lógica de negócios envolvida na camada de apresentação.
  3. Camada de apresentação usada, camada de lógica de negócios e camada de acesso a dados no aplicativo, mas às vezes ainda precisa escrever código redundante na camada de apresentação para consumir ou chamar outros módulos ou outros casos de uso.
  4. Os defeitos de integração são injetados quando fazemos algumas alterações nos módulos integrados.
  5. A correção e aprimoramentos de defeitos estão levando mais tempo para analisar a lógica da camada de apresentação e suas dependências de integração e causando a abertura de novos defeitos.
  6. ASP.NET MVC não pode ser escolhido porque a interface do usuário é complexa de construir.
Causa Raiz do Problema:

Na camada de Apresentação,

  1. Uma página ou formulário contém controles que exibem dados de domínio do aplicativo. Um usuário pode modificar os dados e enviar as alterações. A página recupera os dados do domínio, manipula os eventos do usuário, altera outros controles na página em resposta aos eventos e envia os dados do domínio alterados. Incluindo o código que executa essas funções na página da Web Além disso, é difícil compartilhar código entre páginas da Web que exigem o mesmo comportamento. a classe complexa, difícil de manter e difícil de testar.
  2. Camada de interface do usuário, lógica da interface do usuário, lógica de apresentação e lógica de negócios estão fortemente acoplados.
  3. A camada de apresentação cuida da integração de módulos ou casos de uso.
Solução:
  1. Escolha um melhor padrão de camada de apresentação para separar a camada de interface do usuário, lógica da interface do usuário e lógica de apresentação e lógica de negócios como camadas separadas para tornar o código mais fácil de entender e manter.
  2. Ative o baixo acoplamento ao desenvolver módulos ou quaisquer casos de uso.
  3. Maximize o código que pode ser testado com automação. (Exibições são difíceis de testar.)
  4. Compartilhe código entre páginas que requerem o mesmo comportamento.
  5. Separe as responsabilidades pela exibição visual e pelo comportamento de manipulação de eventos em diferentes classes denominadas, respectivamente, a exibição e o apresentador ou controlador ou ViewModel.
Benefícios de usar o padrão de apresentação:
  1. Modularidade
  2. Abordagem orientada a testes – maximize o código que pode ser testado com automação
  3. Separação de preocupações
  4. Compartilhamento de código entre páginas e formulários
  5. De fácil manutenção

Quais são os padrões de camada de apresentação disponíveis?

MVC (controlador de exibição de modelo)

MVP (Model View Presenter) ou (Model Passive View, Supervisor Controller)

MVVM (Model View ViewModel)

MVC x MVP x MVVM:
  1. Model e View representam o mesmo em todos os 3 padrões acima?

    Sim

  2. A finalidade do Controller, Presenter e ViewModel é a mesma em todos os 3 padrões acima?

    Sim

  3. A comunicação e o fluxo de Model, View com Controller, Presenter e ViewModel são os mesmos?

    Não, essa é a razão pela qual esses 3 padrões existem.

  4. Esses padrões são substitutos de PL (Camada de apresentação), BLL (Camada lógica de negócios) e DAL (Camada de acesso a dados)

    Não, esses padrões são para separar a interface do usuário e a lógica da interface do usuário da lógica de apresentação e permitem o acoplamento flexível.

Escolha o melhor padrão de camada de apresentação:

MVP

  1. Não é possível vincular por meio de um contexto de dados
  2. Design complexo de interface do usuário
  3. Melhor para Windows Forms, ASP.NET Web Forms e Sharepoint Applications

MVC

  1. Melhor para ASP.NET com interface simples
  2. Modelo Desconectado (Visualizar a separação de todas as outras camadas)

Nota: Aqui não estou focando em MVC VM (MVC ViewModel de MVC3) e ASP.NET MVVM com Injeção de Dependência.

MVVM

  1. É possível vincular por meio de um contexto de dados
  2. Modelo conectado
  3. Melhor para aplicativos WPF e Silverlight
ASP.NET Web Forms vs ASP.NET MVC:

Formulários da Web ASP.NET

  1. RAD
  2. Desenvolvimento mais fácil
  3. Rico ecossistema de controles
  4. Familiar como a abordagem de desenvolvimento para o desenvolvimento de Windows Forms
  5. Sem ViewStatee sem suporte de postback

ASP.NET MVC

  1. Separação Limpa de Interesses (SoC)
  2. Controle total de marcação
  3. Habilitar TDD (Desenvolvimento Orientado a Testes)
  4. Habilite e facilite o REST
  5. Integração mais fácil do lado do cliente (Javascript)
  6. Multi View Engine (isso é muito legal!)
  7. Sem ViewState e sem suporte a postback
  8. Extensível e habilitado para WEB 2.0

Modelo, visualizações e controlador

  • Modelo: os objetos de modelo são as partes do aplicativo que implementam a lógica para o domínio de dados do aplicativo. Freqüentemente, os objetos de modelo recuperam e armazenam o estado do modelo em um banco de dados. Por exemplo, um objeto Produto pode recuperar informações de um banco de dados, operar nele e, em seguida, gravar as informações atualizadas de volta em uma tabela Produtos no SQL Server.
  • Exibições: as exibições são os componentes que exibem a interface do usuário (UI) do aplicativo. Normalmente, essa interface do usuário é criada a partir dos dados do modelo. Um exemplo seria uma exibição de edição de uma tabela Produtos que exibe caixas de texto, listas suspensas e caixas de seleção com base no estado atual de um objeto Produtos.
  • Controlador: os controladores são os componentes que lidam com a interação do usuário, trabalham com o modelo e, por fim, selecionam uma visualização para renderizar que exibe a interface do usuário. Em um aplicativo MVC, a exibição exibe apenas informações; o controlador manipula e responde à entrada e interação do usuário. Por exemplo, o controlador lida com valores de string de consulta e passa esses valores para o modelo, que por sua vez consulta o banco de dados usando os valores.
Ciclo de vida da página de alto nível ASP.NET MVC?
Ciclo de vida de página de baixo nível ASP.NET MVC?

Novos recursos do MVC2.0

1 Auxiliares de modelo:

Templated Helpers nos ajuda a associar automaticamente elementos HTML para edição e exibição com tipos de dados.

Por exemplo, quando os dados do tipo System.DateTimesão exibidos em uma exibição, um elemento de interface do usuário datepicker pode ser renderizado automaticamente.

Isso é semelhante a como os modelos de campo funcionam no ASP.NET Dynamic Data.

2 Áreas:

Usando áreas Podemos organizar um grande projeto em várias seções menores para gerenciar a complexidade de um grande aplicativo da Web.

Cada seção ("área") geralmente representa uma seção separada de um grande site da Web e é usada para agrupar conjuntos relacionados de controladores e exibições.

Por exemplo

Areas
    Admin
    Controllers
    Models
    Views
    Iniala Claims
    Controllers
    Models
    Views
3 Suporte para controladores assíncronos:

O ASP.NET MVC2 permite que os controladores processem solicitações de forma assíncrona.

Isso pode levar a ganhos de desempenho, permitindo que servidores que frequentemente chamam operações de bloqueio (como solicitações de rede) chamem contrapartes sem bloqueio.

4 Suporte para DefaultValueAttributeparâmetros de método de ação:

A System.ComponentModel.DefaultValueAttributeclasse permite que um valor padrão seja fornecido para o parâmetro de argumento para um método de ação.

Por exemplo, suponha que a seguinte rota padrão esteja definida:

{controller}/{action}/{id}

Suponha também que o seguinte controlador e método de ação esteja definido:

public class ArticleController
{
  public ActionResult View(int id, [DefaultValue(1)]int page)
  {
  }
}

Qualquer uma das URLs de solicitação a seguir chamará o método de ação View definido no exemplo anterior.

  • /Artigo/Visualização/123
  • /Article/View/123?page=1 (Efetivamente igual ao pedido anterior)
  • /Artigo/Visualização/123?página=2
5 Suporte para ligação de dados binários com Model Binders:

Há duas novas sobrecargas do Html.Hiddenauxiliar que codificam valores binários como strings codificadas em base 64:

public static string Hidden(this HtmlHelper htmlHelper, string name, Binary value);
public static string Hidden(this HtmlHelper htmlHelper, string name, byte[] value);
6 Suporte para DataAnnotationsAtributos:

Usando os atributos RangeAttribute, RequiredAttribute, StringLengthAttributee de RegexAttributevalidação (definidos no System.ComponentModel.DataAnnotationsnamespace) quando nos vinculamos a um modelo para fornecer validação de entrada.

using System.ComponentModel.DataAnnotations;
namespace MvcTmpHlprs
{
    [MetadataType(typeof(ProductMD))]
    public partial class Product
    {
        public class ProductMD
        {
            public object SellStartDate { get; set; }
            [UIHint("rbDate")]
            public object SellEndDate { get; set; }
            [DataType(DataType.Date)]
            public object DiscontinuedDate { get; set; }
            [ScaffoldColumn(false)]
            public object ModifiedDate { get; set; }
            [ScaffoldColumn(false)]
            public object rowguid { get; set; }
            [ScaffoldColumn(false)]
            public object ThumbnailPhotoFileName { get; set; }
        }
    }
}
7 Provedores de validação de modelo:

A classe do provedor de validação de modelo representa uma abstração que fornece lógica de validação para o modelo.

O ASP.NET MVC inclui um provedor padrão com base nos atributos de validação incluídos no System.ComponentModel.DataAnnotationsnamespace.

8 Validação do lado do cliente:

A classe de provedor do validador de modelo expõe metadados de validação para o navegador na forma de dados serializados em JSON que podem ser consumidos por uma biblioteca de validação do lado do cliente.

A ASP.NET MVC 2 inclui uma biblioteca de validação de cliente e um adaptador que oferece suporte aos DataAnnotationsatributos de validação de namespace observados anteriormente.

9 Novo RequireHttpsAttributefiltro de ação:

A ASP.NET MVC 2 inclui uma nova RequireHttpsAttributeclasse que pode ser aplicada a métodos de ação e controladores.

Por padrão, o filtro redireciona uma solicitação não SSL (HTTP) para o equivalente habilitado para SSL (HTTPS).

10 Substituindo o verbo do método HTTP:

Quando construímos um site usando o estilo arquitetônico REST, os verbos HTTP são usados ​​para determinar qual ação executar para um recurso.

O REST requer que os aplicativos suportem toda a gama de verbos HTTP comuns, incluindo GET, PUT, POSTe DELETE.

A ASP.NET MVC 2 inclui novos atributos que podemos aplicar a métodos de ação e que apresentam sintaxe compacta.

Esses atributos permitem que o ASP.NET MVC selecione um método de ação com base no verbo HTTP.

Por exemplo, uma POSTsolicitação chamará o primeiro método de ação e uma PUTsolicitação chamará o segundo método de ação.

[HttpPost]
 public ActionResult Edit(int id)
  
[HttpPut]
 public ActionResult Edit(int id, Tag tag)

Nas versões anteriores do ASP.NET MVC, esses métodos de ação exigiam uma sintaxe mais detalhada, conforme mostrado no exemplo a seguir:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id)
 
[AcceptVerbs(HttpVerbs.Put)]
public ActionResult Edit(int id, Tag tag)

Como os navegadores suportam apenas os verbos GETe POSTHTTP, não é possível postar em uma ação que exija um verbo diferente. Portanto, não é possível oferecer suporte nativo a todas as RESTfulsolicitações.

No entanto, para oferecer suporte a RESTfulsolicitações durante POSTas operações, o ASP.NET MVC 2 apresenta um novo HttpMethodOverridemétodo auxiliar de HTML.

Esse método renderiza um elemento de entrada oculto que faz com que o formulário emule efetivamente qualquer método HTTP.

Por exemplo, usando o HttpMethodOverridemétodo auxiliar HTML, podemos fazer com que um envio de formulário apareça como um pedido PUTou .DELETE

O comportamento de HttpMethodOverrideafeta os seguintes atributos:

  • HttpPostAttribute
  • HttpPutAttribute
  • HttpGetAttribute
  • HttpDeleteAttribute
  • AcceptVerbsAttribute
11 Nova HiddenInputAttributeClasse para Helpers Modelos:

Podemos aplicar o novo HiddenInputAttributeatributo a uma propriedade de modelo para indicar se um elemento de entrada oculto deve ser renderizado ao exibir o modelo em um modelo de editor (o atributo define um UIHintvalor implícito de HiddenInput).

A DisplayValuepropriedade do atributo permite especificar se o valor é exibido nos modos de editor e exibição.

Quando DisplayValueé definido como falso, nada é exibido, nem mesmo a marcação HTML que normalmente envolve um campo.

O valor padrão para DisplayValueé verdadeiro.

Podemos usar HiddenInputAttributeo atributo nos seguintes cenários:

  • Quando uma visualização permite que os usuários editem o ID de um objeto e é necessário exibir o valor, bem como fornecer um elemento de entrada oculto que contenha o ID antigo para que possa ser passado de volta ao controlador.
  • Quando uma exibição permite que os usuários editem uma propriedade binária que nunca deve ser exibida, como uma propriedade de carimbo de data/hora.

Nesse caso, o valor e a marcação HTML circundante (como o rótulo e o valor) não são exibidos.

Por exemplo:

public class ProductViewModel
{
    [HiddenInput] // equivalent to [HiddenInput(DisplayValue=true)]
    public int Id { get; set; }
  
    public string Name { get; set; }
  
    [HiddenInput(DisplayValue=false)]
    public byte[] TimeStamp { get; set; }
}
12 Html.ValidationSummaryO método auxiliar pode exibir erros no nível do modelo:

Em vez de sempre exibir todos os erros de validação, o Html.ValidationSummarymétodo auxiliar tem uma nova opção para exibir apenas erros no nível do modelo.

Isso permite que erros em nível de modelo sejam exibidos no resumo de validação e erros específicos de campo sejam exibidos ao lado de cada campo.

13 Modelos T4 no Visual Studio Geram código específico para a versão de destino do .NET Framework:

Uma nova propriedade está disponível para arquivos T4 do host ASP.NET MVC T4 que especifica a versão do .NET Framework usada pelo aplicativo.

Isso permite que os modelos T4 gerem código e marcação específicos para uma versão do .NET Framework.

No Visual Studio 2008, o valor é sempre .NET 3.5. No Visual Studio 2010, o valor é .NET 3.5 ou .NET4.

14 Melhorias na API:

Adicionado um método virtual protegido CreateActionInvokerna classe Controller.

Esse método é invocado pela ActionInvokerpropriedade de Controller e permite a instanciação preguiçosa do invocador se nenhum invocador já estiver definido.

Fonte de gravação: instantshift.com

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação