Pergunta

Eu não desenvolver muitas formas de aplicação de desktop / Windows, mas me ocorreu que pode haver algum benefício para usando o padrão MVC (Model View Controller) para Windows Forms desenvolvimento .NET.

Alguém já implementou MVC no Windows Forms? Se assim for, você tem alguma dica sobre o design?

Foi útil?

Solução

O que eu fiz no passado é usar algo semelhante, Model-View-Presenter .

[NOTA: Este artigo usado para estar disponível na web. Para vê-lo agora, você vai precisar fazer o download do CHM, e, em seguida, visualizar as propriedades do arquivo e clique em Desbloquear. Em seguida, você pode abrir o CHM e encontrar o artigo. Graças um milhão, Microsoft! suspirar ]

O formulário é a vista, e eu tenho uma interface IView para ele. Todo o processamento acontece no apresentador, que é apenas uma classe. A forma cria um novo apresentador, e passa-se como IView do apresentador. Desta forma, para testar você pode passar em uma farsa IView vez, e, em seguida, enviar comandos a ele a partir do apresentador e detectar os resultados.

Se eu fosse usar um pleno direito MVC, eu acho que eu iria fazê-lo desta maneira:

  • O formulário é o Ver . Ele envia comandos para o modelo, gera eventos que o controlador pode subscrever e subscreve a eventos do modelo.
  • O controller é uma classe que assina os eventos da vista e envia comandos para a vista e para o modelo.
  • O modelo gera eventos que a visão assina.

Esta caberia com o MVC clássico diagrama . A maior desvantagem é que, com eventos, pode ser difícil dizer quem está assinando o quê. O padrão MVP usa métodos em vez de eventos (pelo menos da maneira que eu tenho implementado lo). Quando o formulário / visão gera um evento (por exemplo someButton.Click), a forma simplesmente chama um método em que o apresentador para executar a lógica para isso. A visão e modelo não têm qualquer conexão direta em tudo; ambos têm que passar pelo apresentador.

Outras dicas

Bem, na verdade o Windows implementa Forms uma versão "free-style" da MVC, bem como alguns filmes implementar alguma porcaria interpretação "estilo livre" de alguns livros clássicos (Romeo & Juliet vêm à mente).

Eu não estou dizendo implementação Windows Forms é ruim, é apenas ... diferente.

Se você usa Windows Forms e técnicas OOP adequadas, e talvez um ORM como EntitySpaces para seu acesso de banco de dados, então você poderia dizer que:

  1. A infra-estrutura ORM / OOP é o modelo
  2. As Formas são as Visualizações
  3. Os manipuladores de eventos são o Controlador

Apesar de ter tanto Veja e controlador representado pelo mesmo objeto make separando o código da representação maneira mais difícil (não há nenhuma maneira fácil de plug-in uma "visão GTK +" em uma classe derivada de Microsoft.Windows.Forms.Form).

O que você pode fazer, se você é o suficiente cuidado. É manter o seu código do formulário completamente , separado do código do controlador / modelo apenas por escrever coisas relacionadas GUI nos manipuladores de eventos, e todos os outros lógica de negócios em uma classe separada. Nesse caso, se você sempre quis usar GTK + para escrever uma outra camada View, você só precisa reescrever o código GUI.

Windows Forms não é projetado a partir do zero para usar MVC. Você tem duas opções.

Primeiro, você pode lançar seu próprio implementação de MVC.
Em segundo lugar, você pode usar um framework MVC projetado para Windows Forms.

A primeira é simples para começar a fazer, mas o mais longe em que você começa, mais complexo ele é. Eu sugiro à procura de um bom, preexistente e bem testado, framework MVC projetado para funcionar com o Windows Forms. Acredito este post é um ponto de partida decente.

Para qualquer um começando, eu sugiro pular Windows Forms e desenvolver contra WPF, se você tem a opção. É uma muito melhor estrutura para criar a interface do usuário. Há muitos frameworks MVC sendo desenvolvidos para WPF, incluindo esta e que um .

De acordo com a Microsoft, o Application Block UIP mencionado por @jasonbunting é "arquivado". Em vez disso, olhar para o Bloquear Aplicação Smart Client ou a ainda mais recente < a href = "http://msdn.microsoft.com/en-us/library/aa480482.aspx" rel = "nofollow noreferrer"> Smart Fábrica de Software cliente , que suporta ambos WinForms e WPF SmartParts.

Verifique na User Interface Processo (UIP) Application Block . Eu não sei muito sobre isso, mas olhou para ele há alguns anos. Pode haver versões mais recentes, verifique ao redor.

"O Application Block UIP é baseado no MVC (MVC)."

Dê uma olhada nas Patterns MS e aplicação bloco Práticas Smart Client que tem alguma orientação e classes que orientá-lo através da implementação de um apresentador patter vista do modelo no Windows Forms -. Dê uma olhada no aplicativo de referência incluído

Para WPF isso está sendo superseced pela prisma projeto

A abordagem fábricas de software é uma ótima maneira de aprender as melhores práticas

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top