Devo estar usando o AngularJS e o ASP.NET MVC?

58

Comecei a aprender o AngularJS e o ASP.NET MVC, mas não sei por que usá-los juntos no mesmo projeto?

Eles não são os dois frameworks MVC? Devo usá-los ambos no mesmo aplicativo? Não é um ou outro?

Natalie
fonte

Respostas:

74

Se você estiver criando um aplicativo de página única (SPA) , provavelmente não precisará do "MVC" no ASP.NET MVC . As visualizações, especialmente visualizações dinâmicas, provavelmente são entregues / manipuladas no lado do cliente. Alças angulares muito bem.

Mas talvez você não queira um SPA 100%. Então o que? Imagine, em vez disso, 10 páginas, mas 10 páginas muitodinâmico. Depois que um usuário faz logon, há um pequeno crachá de usuário no canto direito. Isso não é dinâmico. Ele mostra apenas algumas coisas bacanas, como a "pontuação" do usuário e sua última selfie. Você armazena em cache as coisas bacanas para que elas possam ser facilmente recuperadas. Agora, você pode seguir dois caminhos com isso. Se você é um purista do MVC do lado do cliente, basta buscar os dados do selo após a entrega da carga útil HTML inicial, assim como todos os outros dados. Mas talvez você não seja um purista. Talvez você seja o oposto de um purista. Talvez você seja um indiferente. Portanto, em vez de entregar o HTML inicial, entregar algum JavaScript que será postado de volta no servidor, postar via JavaScript para obter dados do emblema e, em seguida, mesclar esses dados em uma visualização pelo MVC do lado do cliente,isso como seu HTML inicial. Após a entrega do seu HTML inicial, prossiga com suas palhaçadas típicas do MVC do lado do cliente.

Portanto, o MVC no servidor e no cliente é apenas uma maneira conveniente de organizar o código que costumava ser uma bagunça em 2001. Você não precisa escolher um ou outro. Você pode escolher ambos. Concedido, quanto mais você faz após a entrega do HTML inicial, menos precisa do MVC do lado do servidor. Ainda assim, está disponível para você, se precisar. Por exemplo, trabalhei em um aplicativo ASP.NET MVC / Angular em que modelos Angular externos podem realmente ser o .NET MVC ActionResult. Isso significa que o controlador do servidor pode mesclar dados em sua exibição, entregá-los à Angular como um modelo e o controlador da Angular pode mesclar seus dados na exibição. Não estou dizendo que essa é uma boa ideia, mas mostra que uma forma de MVC não torna a outra obsoleta.

Além disso, não importa como você implante o Angular, você precisará de uma maneira de fornecer esse HTML inicial, os modelos e, o mais importante, os dados. Por que não usar uma plataforma que facilite? Existem muitos, mas o .NET MVC não é negligente. Como eu disse, você pode transformar o HTML inicial e os modelos angulares externos no resultado de uma ação MVC, mas, melhor ainda, você pode usar a API da Web do .NET para entregar os dados. A API da Web é tão deliciosa quanto a compota de damasco.

Resumido: MVC é apenas um padrão. Você pode usar esse padrão em qualquer número de camadas físicas. Não pode ser usado. Use-o livremente, se fizer sentido. Além disso, o Angular pode não ser o MVC de qualquer maneira (o mesmo diz as pessoas que se preocupam com essas coisas), então fique à vontade para usá-lo com uma ferramenta que tenha "MVC" no nome. Inferno, mesmo que seja MVC, misture e combine conforme desejado.

Roger escasso
fonte
3
Resposta surpreendente. Muito obrigado pela sua explicação +1
Natalie
Você pode me dizer, por exemplo, se há uma API da Web que está me fornecendo dados e eu quero mostrar esses dados na grade, eu faço o loop e o modelo usando Angular ou MVC? Chamo o serviço de API da Web usando como? Como você decide, desde o início do projeto, para que lado vai?
Natalie
1
@ Natalie Se os dados são da API da Web, é provável que você os esteja buscando no lado do cliente. Isso significa que você está vinculando no Angular, não no .NET MVC. Você não executa um loop explicitamente. Você vincula os dados à sua grade / tabela usando ngRepeat . Para buscar os dados, você provavelmente usaria o módulo $ http e ligaria para o terminal da API da Web. Quanto a decidir qual abordagem usar, isso é peculiar. Não há resposta em preto e branco. Você precisa experimentar, avaliar e seguir seus instintos.
Scant Roger
... uma palavra de cautela. Se você nunca usou o Angular ou outra estrutura JavaScript de serviço completo antes, precisará passar algumas horas difíceis aprendendo as regras. Eles não são necessariamente diretos. Posso garantir, porém, que eles facilitarão sua vida a longo prazo. Trabalhar duro. Fique com ele. Você vai se sair bem.
Scant Roger
1
@ ScantRoger Peço desculpas, mas sua resposta não esclareceu as coisas para mim. Se eu estiver usando uma estrutura do lado do servidor MVC, onde o View é independente, como vincular o Angular a ele? O servidor (a API da web) já contém as definições de modelo e controlador. Portanto, se eu usar o Angular, estou sendo imposto novamente ao MVC. Então acaba sendo MCVCM ...? (Definições de modelo e controlador no lado do cliente e no servidor) Ou é esse o motivo de eu não estar usando uma estrutura MVC do lado do cliente, como Angular, se já estiver usando uma estrutura MVC para minha API da Web
Abdul
17

O ASP.NET MVC é uma estrutura do lado do servidor; não importa quais bibliotecas JavaScript você usa. O AngularJS é uma biblioteca do lado do cliente, que não se importa com a tecnologia do servidor que alimenta o site - pode ser Python, ASP.NET MVC ou até mesmo o conjunto antigo de arquivos HTML estáticos armazenados diretamente no disco.

O ASP.NET MVC e o AngularJS são compatíveis e existem muitos projetos por aí que os utilizam juntos.

Você precisa usar os dois? Na verdade não. Depende inteiramente das necessidades do seu projeto.

  • Se o seu site for dinâmico, você precisará usar alguns scripts do lado do servidor. Você pode usar o ASP.NET e o fato de estar usando o AngularJS não tornará o código do servidor mais MVC. Se você deseja estruturar seu aplicativo do lado do servidor como MVC, escolha o ASP.NET MVC.

  • Da mesma forma, o fato de você estar usando o ASP.NET MVC não implica nada na estrutura do seu código do lado do cliente. Você pode colocar todo o seu JavaScript em um único arquivo sem pensar na estrutura e ficar feliz com isso (até o projeto começar a crescer). Aqui, novamente, o AngularJS se apresenta como uma maneira de estruturar seu aplicativo no lado do cliente.


Nota lateral: você marcou sua pergunta ASP.NET MVC 3. A menos que esse seja um projeto herdado que você precise manter ou tenha restrições específicas ao hospedar o aplicativo em servidores herdados que não foram atualizados nos últimos quatro anos, você pode usar o ASP .NET MVC 4 ou 5.

Arseni Mourzenko
fonte
1
obrigado MainMa. Estou ciente de que o AngularJS é do lado do cliente e o MVC é do lado do servidor. Também estou ciente de que outras bibliotecas como guidão, knockoutjs podem ser usadas no MVC.NET e Angular podem ser usadas em aplicativos php, java. O que estou perguntando é por que usar os dois juntos, já que eles fazem a mesma coisa que é "MVC", mas um é o lado do cliente e o outro é o lado do servidor. Por que misturar as estruturas MVC no lado do cliente e no servidor? Não podemos fazer um aplicativo que seja apenas Angular? Ou um aplicativo que é apenas o aplicativo MVC.net?
Natalie
@ Natalie: Entendo. Eu editei a resposta para fornecer mais informações sobre isso. Uma resposta curta é que você combina essas duas estruturas em projetos em que faz sentido ter uma estrutura específica no servidor e no cliente.
Arseni Mourzenko
Você pode me dizer, por exemplo, se há uma API da Web que está me fornecendo dados e eu quero mostrar esses dados na grade, eu faço o loop e o modelo usando Angular ou MVC? Chamo o serviço de API da Web usando como? Como você decide, desde o início do projeto, para que lado vai?
Natalie
Eu tenho as mesmas perguntas em minha mente. Não consegui encontrar um motivo para usar o asp.net MVC. Quero dizer, parece que a API da Web Asp.net no lado do servidor e Angular no lado do cliente seriam suficientes. Mas pensei primeiro; API Web = Camada de acesso a dados, Asp.Net MVC = Camada lógica de negócios, Angular = Camada da interface do usuário. Mas, pelo lado angular, só podemos fazer chamadas de API da Web, portanto não podemos usar o lado do servidor Asp.Net MVC. Acho que precisamos de um bom exemplo de por que precisamos usar o Asp.Net MVC.
Salim
9

Se você estiver usando o visual studio, há um novo modelo de site MVC 'app de página única' que inclui controladores angulares e MVC Web Api.

Isso funciona bem porque o código do lado do servidor MVC fornece pontos de extremidade json para o código do lado do cliente angular chamar.

Além disso, você pode usar os controladores MVC para exibir as visualizações básicas em html do seu aplicativo de página única. isso lhe dá o poder da geração, autorização, redirecionamentos, tratamento de erros do lado do servidor etc.

Muitas vezes, você deseja uma pequena quantidade de html / javascript gerado pelo servidor, mesmo em um aplicativo de página única, coisas como URLs de terminal para diferentes ambientes, idiomas diferentes ou até mesmo a página de autenticação ímpar, que pode ser mais fácil de executar no servidor.

Ewan
fonte
1
Ao criar o modelo SPA padrão no VS 2015 CE, vejo bootstrap, jquery, nocaute, resposta e sammy na pasta de script, mas não angular. Estou esquecendo de algo?
TK-421
2

Três anos depois, use a API da Web do ASP.NET para veicular seus dados e Angular (js ou mais recente) para estruturar seu aplicativo no lado do cliente. Se você estiver criando um site estático, use o ASP.NET MVC.

user441521
fonte