Eu sou da opinião que os aplicativos são muito diferentes uns dos outros e nosso entendimento de como os aplicativos devem ser escritos ainda é muito limitado. Os aplicativos Windows Forms anteriores nos quais trabalhei eram muito diferentes uns dos outros. Algumas das diferenças de design que tenho visto são (incluindo a maioria das combinações):
- Fale diretamente com o banco de dados (2 camadas)
- Use um back-end que foi escrito para o aplicativo em questão (3 camadas)
- Use um conjunto de serviços da web que foram escritos para uso por muitos aplicativos e não podem ser alterados para o seu aplicativo. (Arquitetura Orientada a Serviços)
- Atualizações sendo feitas por operações CRUD
- Atualizações sendo feitas com o padrão de comando (envio de comandos para o servidor backend)
- Muitos usos de vinculação de dados / nenhum uso de vinculação de dados
- A maioria dos dados sendo "como uma tabela" (por exemplo, faturas) que funcionam bem em controles de grade padrão / precisam de controles personalizados para a maioria dos dados da IU.
- Um desenvolvedor / equipes de 10 ou 20 desenvolvedores (apenas na IU)
- Muitos testes de unidade usando simulações etc / nenhum teste de unidade
Portanto, não acho que seja possível criar uma implementação de MVC (ou MVP) que sempre se encaixa bem.
Os melhores posts que vi realmente explicando MVC e por que um sistema MVC é construído da maneira que é, são a série "Build Your Own CAB" de Jeremy D Miller . Depois de trabalhar, você será capaz de entender muito melhor suas opções.
O Guia de Smart Client da Microsoft (CAB / Microsoft Composite Application Block) também deve ser considerado. É um pouco complexo, mas pode funcionar bem para aplicativos que se encaixam bem.
Selecionando uma implementação MVC / MVP para um projeto Winforms fornece uma visão geral que vale a pena ler. Muitas pessoas gostam de PureMVC . Eu nunca usei, mas gostaria de examiná-lo na próxima vez que precisar de um framework MVC.
" Presenter First " é uma abordagem de desenvolvimento de software que combina as idéias do padrão de design Model View Presenter (MVP) e o desenvolvimento orientado a testes . Ele permite que você comece escrevendo testes no idioma do cliente. Por exemplo:
"Quando clico no botão 'Salvar', o arquivo deve ser salvo e o aviso de arquivo não salvo deve desaparecer.”
Não tenho experiência com o "Presenter First", mas vou tentar quando tiver oportunidade, pois parece muito promissor.
Outras questões do Stack Overflow que você pode querer ver estão aqui e aqui .
Se você está pensando em usar o WPF a qualquer momento, dê uma olhada no padrão Model-View ViewModel (MVVM) . Aqui está um vídeo muito bom que você deve dar uma olhada: Jason Dolinger em Model-View-ViewModel .
O padrão de design MVVM (Model View View Model) para Winforms oferece outra opção que pode facilitar a conversão para WPF, se necessário. Magical.Trevor é outro exemplo de MVVM para Windows Forms que também inclui ligação automática com base em nomes de propriedades.
Também pergunte a si mesmo por que está usando MVC.
- Você deseja realizar o teste de unidade o máximo de código possível?
- Você está tentando permitir que o máximo de código possível seja reutilizado?
- Você está tentando tornar sua base de código fácil de entender?
- 101 outros motivos que podem ser válidos para um determinado projeto.
Uma vez que seus objetivos são claros , fica mais fácil escolher uma implementação ou outra.