MVVM ou MVC? Deseja usar o mesmo conjunto de classes para WPF e ASP.NET


10

Eu sou um novato em termos de padrões de design. Comecei a aprender MVC quando estou ouvindo um novo burburinho, o MVVM.

Desejo aprender as idéias de ambos, redesenhando um aplicativo antigo de inventário e faturamento que desenvolvi para um cliente. Quero escrever um aplicativo WPF baseado no Windows e uma versão baseada na Web. Eu quero usar o mesmo conjunto de classes, se possível, se não, pelo menos com poucas modificações.

Li alguns artigos, mas não estou seguindo a arquitetura e os conceitos de alto nível do .NET 3.5 e 4 discutidos lá. Quero avançar passo a passo, projetando apenas o que realmente preciso no meu projeto da vida real.

Existe alguma referência fácil e passo a passo ao MVVM? O MVVM é um superconjunto ou subconjunto do MVC? Qual padrão é moderno e qual devo escolher para as versões Windows e Web do meu aplicativo?

Existem certas classes que raramente preciso conectar ao View. Nesse caso, projetar a mesma classe da maneira MVVM provará ser um trabalho adicional.

Respostas:


10

Existe alguma referência fácil e passo a passo ao MVVM?

Sim existe. Dê uma olhada no aqui.

O MVVM é um superconjunto ou subconjunto do MVC?

O MVVM pertence à família MVC, portanto, se você pode dizer isso, é um subconjunto. É uma variante para separar a interface do usuário da lógica de negócios abaixo. Eu o descreveria como um irmão do MVC. Desde os primeiros dias da OOP, as pessoas têm procurado maneiras de separar a interface do usuário de sua lógica. MVC foi o primeiro arquétipo que evoluiu. É bem simples, embora a maioria das pessoas não acerte. A visualização é apenas um observador do modelo e o chama quando necessário. O controlador é apenas uma estratégia para a visualização se comunicar com o modelo, por exemplo, quando você precisa de um comportamento intercambiável (por exemplo, ReadonlyController, AdminController). O MVC é muito bem-sucedido e é realmente uma boa prática aplicá-lo.

MVVM é um tipo especializado de padrão MVP, conforme descrito por Martin Fowler . O MVP tenta manter a visualização o mais burra possível (enquanto ainda recebe informações do usuário etc.), melhorando assim a testabilidade. Ele visa uma abstração da visão e da lógica de interação que deve ser colocada no apresentador. O apresentador se comunica apenas com o modelo / lógica de negócios e atualiza a Visualização. Martin Fowler descreve o MVVM praticamente em seu Modelo de modelo de apresentação.

A vista é completamente abstraída em um ViewModel. Quando as Viewnecessidades de uma propriedade, as ViewModelnecessidades de tê-lo também. Ele (o ViewModel) deve ser completamente independente da tecnologia de interface do usuário subjacente, uma abstração. Para se comunicar entre o View e o ViewModel, é necessário usar um padrão de sincronização (ou seja, Observer). Isso não é fácil de ser realizado em um ambiente da Web sem estado. O MVVM difere do MVP, pois o View não se liga mais ao modelo / lógica de negócios, mas ao ViewModel.

Qual padrão é moderno e qual devo escolher para as versões Windows e Web do meu aplicativo?

O modelo de apresentação (tipo MVVM) em teoria deve ser completamente independente da tecnologia da interface do usuário em uso. No entanto, o aspecto da sincronização precisa ser coberto. Isso pode ser feito facilmente vinculando-se a Comandos e propriedades com o WPF, onde a cola de sincronização já está presente. Com o ASP.NET, essa é uma história diferente. No entanto, há um artigo no CodeProject que usou o Modelo de modelo de apresentação com todas as tecnologias de interface do usuário do Windows. Dar uma olhada.


4

Devido a problemas no ciclo de vida e à necessidade de manter o estado entre as postagens da página, será muito difícil reutilizar 100% do seu código de UI nenhum entre a Web e o WPF. O Asp.net não possui a poderosa ligação de dados necessária para o MVVM, mas também muita lógica é executada em jscript hoje em dia, pois as pessoas esperam que a interface do usuário se atualize sem a necessidade de uma postagem.

Se você pudesse usar o SilverLight, sua vida seria muito menos complexa :-)

Da mesma forma, você pode hospedar um navegador da Web no seu aplicativo WPF para os bits comuns da interface do usuário?


Quais benefícios posso obter com o SilverLight?
RPK

11
@PRK, o Silverlight permitirá que você faça tudo o que o WPF faz e, se você conseguir que todos os seus usuários da "web" o instalem, também criará uma solução acessada pela web e "parecida" com um aplicativo da web.
31411 Ian

4

Sua intenção de usar as mesmas classes para a interface do usuário baseada em ASP.Net e WPF não é muito prática. A ligação de dados e o uso de javascript na web são muito diferentes do WPF. A única opção em que consigo pensar é no MVP com visão completamente passiva . Em teoria, você pode ter o mesmo apresentador que preenche uma página da Web e WPF.
Na prática, desenvolverei uma arquitetura em que a maioria das regras de negócios está em uma camada de serviço da web e duas camadas de apresentação diferentes, com o mínimo de regras de negócios possível, que fala com esse serviço da web.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.