Qual padrão usar com um Formulário Web típico?

9

Estou escrevendo um aplicativo ASP.NET Web Forms simples. Desejo melhorar o código implementando qualquer padrão de design com o qual a abstração seja alcançada e aumentando a capacidade de gerenciamento e a compreensibilidade.

Qual padrão é recomendado? Forneça também links para aplicativos de amostra.

RPK
fonte
é um aplicativo de nível empresarial?
precisa

Respostas:

7

Você pode considerar usar o padrão MVVM do Model-View-View Model . É um derivado do MVC, mas foi projetado / destinado a ser usado exatamente na situação que você descreve. Há muitas informações no site do MSDN, se você não quiser pesquisar no Google.

O MVVM facilita uma separação clara do desenvolvimento da interface gráfica do usuário (como linguagem de marcação ou código da GUI) do desenvolvimento da lógica de negócios ou lógica de back-end conhecida como modelo (também conhecido como modelo de dados para distingui-lo da visualização modelo). O modelo de visualização do MVVM é um conversor de valor, o que significa que o modelo de visualização é responsável por expor os objetos de dados do modelo de forma que esses objetos sejam gerenciados e consumidos com facilidade. Nesse aspecto, o modelo de vista é mais modelo que vista, e lida com a maioria, senão toda a lógica de exibição da vista (embora a demarcação entre quais funções sejam tratadas por qual camada seja objeto de discussão e exploração em andamento).

Glorfindel
fonte
Eu li sobre a estrutura do ASP.NET Model View Presenter no codeplex. O MVVM está disponível para Web Forms através de alguma implementação?
RPK
MVP e MVVM são essencialmente os mesmos. O artigo da Wikipedia também explica isso: o MVP é o primeiro derivado dessa cadeia do MVC. Martin Fowler é creditado com a publicação do padrão e lida com alguns dos desafios que um Controller pode ter em um domínio orientado a eventos. O MVVM foi um refinamento a partir daí para tirar vantagem da ligação de dados entre a visualização e o modelo de visualização.
A maioria dos aplicativos que eu vi usa o Repository Pattern sozinho. O que é razão?
RPK
1
O padrão do repositório é um pouco mais rápido de implementar e não é tão pesado quanto o MVP / MVVM. O View está atingindo o modelo diretamente, em vez de ter uma camada intermediária. Comparado ao MVP / MVVM, será mais rápido implementar com menos código para escrever. OTOH, será mais frágil porque está fortemente acoplado à camada de modelo / acesso a dados. O Repository Pattern funcionaria possivelmente para as circunstâncias que você descreveu, mas se o seu projeto crescer, você desejará ter a camada intermediária do Presenter / VM.
10

Com o Formulário da Web do ASP.NET, você normalmente usa o padrão Model View Presenter .

GlenH7 mencionado em sua resposta MVVM; Embora seja um padrão elegante, o ASPX Webform simplesmente não oferece grande suporte para isso. MVVM é mais popular no mundo WPF.

Steven Luu
fonte
6

A única coisa que você precisa evitar a todo custo é o antipadrão da WebForms de colocar a lógica no seu code-behind. Independentemente de você usar o MVP ou uma amostra disso ou não, seus arquivos code-behind devem ser muito esparsos por uma questão de sanidade.

Wayne Molina
fonte
1
Atualmente, meu code-behind está intimamente ligado à lógica. E esse é o maior erro que os desenvolvedores de formulários da Web costumam fazer.
RPK
0

No entanto ... seu requisito declarado é muito abstrato:

Desejo melhorar o código implementando qualquer padrão de design com o qual a abstração seja alcançada e aumentando a capacidade de gerenciamento e a compreensibilidade. ...

... e para esses fins, você parece estar procurando "padrões de design" como sendo algum tipo de receita. Você até cita "abstração" como requisito.

O código já existente encontrado em um aplicativo já existente geralmente não se beneficia das tentativas de "aprimorá-lo". Você precisa fundamentar totalmente seus esforços - não em abstrações como "padrões de design" - mas no próprio aplicativo, exatamente como está agora.

Ao longo de muitas décadas, observei mais de cinquenta aplicativos diferentes que estavam ou ainda estão em serviço e posso ver as "balas de prata" do passado enquanto elas iam e vinham, cada uma impondo uma "nova" maneira de fazer coisas que nunca realmente substituiu nada. Os dois métodos ainda estão lá. A "capacidade de gerenciamento e a compreensibilidade" teriam melhorado muito a longo prazo se essa ou aquela "bala de prata" nunca tivesse sido tentada.

Todo o conceito de "padrões de design", na minha opinião, é que eles são uma maneira de iniciar conversas úteis e sugerir possíveis alternativas. Mas eles não são receitas.

Mike Robinson
fonte
-1

O MVVM é possível no .NET 4.5 com ligação de modelo e o uso de controles de modelo vinculados, como o FormView.

Aqui está a técnica que eu uso:

Projecto ViewModels para cada UserControl e UserControl aninhado e, em seguida, uso um FormView que está sempre em EditMode, onde incluo os controles que se ligam às propriedades do modelo usando expressões de Ligação.

Defino o SelectMethod e UpdateMethod do FormView. A primeira retorna o ViewModel e a segunda chama TryUpdate (). Nas postbacks, eu sempre chamo o método Update do FormView em Pré-carregamento ou Carregamento. Dessa forma, o ViewModel está sempre atualizado a partir da visualização.

Eu executo a lógica dentro do ViewModel e no PreRender eu religo a visualização para aplicar quaisquer alterações. A chave neste método é injetar o ViewModel na visualização (UserControl) fora da visualização (por exemplo, no nível da página) e, é claro, garantir que seja serializável e armazenado em cache no ViewState ou em qualquer outro local que eu escolher.

Por fim, desabilito o ViewState em todos os controles, pois eles são "dirigidos" finalmente pelo ViewModel com armazenamento em cache e não precisam de seu próprio estado.

Essa técnica nunca me falhou até agora e eu só gostaria de encontrar uma solução para a ligação de comandos / botões também, como o WPF.

Panos Roditakis
fonte
1
Leia uncyclopedia.wikia.com/wiki/Wall_of_Text e edite sua resposta.
precisa