O MVVM é mais comumente usado com o WPF porque é perfeitamente adequado para ele. Mas e o Windows Forms? Também existe um padrão de abordagem / design estabelecido e comumente usado como esse para o Windows Forms? Um que funciona explicitamente bem com o Windows Forms? Existe um livro ou um artigo que descreva isso bem? Talvez baseado em MVP ou MVC?
winforms
design-patterns
bitbonk
fonte
fonte
Respostas:
Eu tentei MVP e parece funcionar muito bem com o Windows Forms também. Este livro tem um exemplo de formulários do Windows com padrão MVP (aplicativo de folha de pagamento de amostra). O aplicativo não é tão complexo, mas lhe dará uma idéia de como proceder para criá-lo.
Princípios, padrões e práticas ágeis em C # ...
Você pode obter o código fonte em Source Code
EDITAR:
Existem duas variações do padrão MVP (a) visão passiva e (b) controlador de supervisão
Para cenários complexos de ligação de dados, prefiro seguir o padrão do controlador de supervisão. Na supervisão do padrão do controlador, a responsabilidade da ligação de dados é da visão. Portanto, para treeview / datagrid, isso deve estar nas respectivas visualizações, apenas a lógica agnóstica da visualização deve ser movida para o apresentador.
Recomendarei dar uma olhada na seguinte estrutura MVP MVC # - Uma estrutura MVP
Não use o nome (é uma estrutura MVP).
Vídeo simples do winforms MVP Winforms - MVP
Um exemplo de como lidar com a lista suspensa MVP - DropDownList
Exemplo simples de ligação em árvore (ligação do pobre homem). Você pode adicionar qualquer lógica específica da árvore em BindTree ().
Abaixo está o trecho de código .... não testado, digitado diretamente do pensamento ....
fonte
Como já foi dito, sempre trabalhei em um padrão MVP ao usar o WinForms. Mas o padrão de design que você usará não significa que você usará corretamente. Há um monte de anti-padrão anexado ao MVP.
Se você deseja iniciar tudo de uma maneira boa, precisará usar a estrutura para criar o Smart Client. Portanto, recomendo usar esse design e práticas: Smart Client Software Factory http://www.codeplex.com/smartclient
Você tem uma discussão aqui sobre as estruturas atuais de smart clients: http://codebetter.com/blogs/glenn.block/archive/2008/05/10/prism-cab-and-winforms-futures.aspx
PS: Eu gosto deste post sobre os padrões anti-MVP: http://blog.mattwynne.net/2007/06/13/mvp-smells/
Espero que isto ajude
fonte
O Model-View-ViewModel (MVVM) padrão é um padrão de design. Por definição, um padrão de design mostra uma solução comum no mundo orientado a objetos e esta solução pode ser aplicada em várias plataformas (WPF, WinForms, Java Swing, etc.). Concordo que o MVVM é melhor usado com o WPF, porque aproveita os fortes recursos de ligação. No entanto, o Windows Forms também suporta ligação de dados.
O WAF Windows Forms Adapter mostra como aplicar o padrão MVVM em um aplicativo Windows Forms.
fonte
Eu escrevi sobre uma variação dos padrões de design do MVP / MVVM chamados MVP-VM, que é uma solução personalizada para aplicativos winforms que exigem cobertura completa de testes e usa a ligação de dados como mecanismo principal para manter a apresentação atualizada com os dados do modelo.
MVVM para .NET Winforms
fonte
Fiz a mesma pergunta a dois de meus colegas técnicos: o MVVM for WindowsForms é possível? Ambos me deram a mesma resposta exata: " De jeito nenhum! WindowsForms está faltando as ligações valiosas do WPF e Silverlight (OneTime, OneWay, TwoWay, OnWayToSource) e também está faltando os TypeConverters ."
Novamente, podemos ter o MVVM for WinForms? Sim, nós podemos. Temos todas as peças. Nós apenas temos que colá-los juntos.
fonte
Acredito que o MVP é um padrão adequado ao desenvolvimento do WinForms - como é parcialmente evidenciado pelo uso no CAB - estrutura da Microsoft para o WinForms.
Eu uso o MVP no WinForms para extrair o código do modo de exibição - porque não consigo testar o código do modo de exibição. E também para permitir que o código que precisa ser reutilizado (ou duplicado) fique fora da visualização, onde não pode ser compartilhado.
Posso me referir ao meu próprio projeto em que uso o padrão MVP ExceptionReporter.NET . Embora tenha certeza de que não o uso perfeitamente.
Você mencionou o MVVM trabalhando para o WPF - acho que a razão disso é devido ao forte suporte à ligação de dados. Se você não estiver usando a ligação de dados no WPF (e certamente não é obrigatório), poderá escolher o MVP. O ponto é que o MVP é uma escolha forte para qualquer aplicativo do lado do cliente. E, possivelmente, uma opção 'melhor', mesmo no WPF, se você planeja compartilhar código entre projetos que não são WPF.
Para obter mais evidências do valor do uso do MVP no WinForms, consulte a apresentação em vídeo da Boodhoo sobre o uso do MVP: http://www.bestechvideos.com/2008/06/29/dnrtv-show-14-jean-paul-boodhoo-on-model -view-apresentador E um artigo do MSDN do mesmo autor em http://msdn.microsoft.com/en-us/magazine/cc188690.aspx
fonte
Eles não se destinam a ocultar o modelo, mas a definir com precisão as interações entre as diferentes camadas dos aplicativos. Você pode alterar completamente o back-end e, desde que passe um modelo pelo Bindtree, sua interface continuará funcionando.
Agora, a classe Model pode ser uma má escolha de um nome no exemplo que Rajesh fornece. Pode ser TreeData ou RecordsData. No entanto, você define o que você precisa para usar o mecanismo de ligação do Winforms para vincular um controle específico aos dados subjacentes.
O melhor site para procurar esse tipo de material é aqui . Martin Fowler coletou uma variedade de padrões de design de interface do usuário úteis e padrões de design corporativo.
Novamente, a chave para isso é o uso de interfaces para definir com precisão como cada camada interage.
Em meu próprio aplicativo (aplicativos CAD / CAM usados para executar máquinas de corte de metal), minha estrutura fica assim.
fonte
Você pode usar Arquitetura, Padrões e Práticas Corporativas como ponto de partida, embora estejam um pouco desatualizados.
Em Orientação Geral, existe a Arquitetura de Aplicativos para .NET: Design de Aplicativos e Serviços , que é uma boa introdução às formas do .NET e aos aplicativos de camadas N em camadas.
texto alternativo http://i.msdn.microsoft.com/ms954595.f00aa01%28en-us%2CMSDN.10%29.gif
Para "padrões" mais formais, existe o Enterprise Solution Patterns usando o Microsoft .NET . (fonte: microsoft.com )
Para nomear alguns,
fonte
A primeira boa explicação dos padrões de design de interface do usuário que li foi no blog de Jeremy Miller - Construindo seu próprio CAB . Ele descreve os padrões comuns - Visualização Passiva, MVP, etc. e aborda algumas das maneiras pelas quais você pode implementá-los em C #.
fonte
Você pode experimentar o MugenMvvmToolkit que permite usar um "MVVM puro" para o WinForms. Devido ao fato de suportar ligações em todas as plataformas, todos os recursos nativos de ligação disponíveis para a plataforma WPF estão disponíveis em todas as plataformas (incluindo WinForms).
fonte