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.
Respostas:
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.
fonte
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.
fonte
Resposta curta : observe o padrão MVP que evita possíveis problemas de formulários do ASP.NET por trás do código, acoplando livremente (desacoplando) sua visão e lógica.
Você também pode dar um passo adiante e analisar esta comparação: MVC, MVP, ASP.NET .
As postagens a seguir são bons pontos de entrada e exemplos:
fonte
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.
fonte
No entanto ... seu requisito declarado é muito abstrato:
... 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.
fonte
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.
fonte