Czy powinienem używać zarówno AngularJS, jak i ASP.NET MVC?

58

Zacząłem uczyć się AngularJS i ASP.NET MVC, ale nie jestem pewien, dlaczego używać ich obu razem w tym samym projekcie?

Czy nie są to oba frameworki MVC? Czy powinienem używać ich obu w tej samej aplikacji? Czy to nie jest jedno czy drugie?

Natalie
źródło

Odpowiedzi:

74

Jeśli budujesz aplikację jednostronicową (SPA) , prawdopodobnie nie potrzebujesz „MVC” w ASP.NET MVC . Widoki, szczególnie widoki dynamiczne, są prawdopodobnie dostarczane / modyfikowane po stronie klienta. Kątowe uchwyty tak dobrze.

Ale może nie chcesz 100% SPA. Co wtedy Wyobraź sobie zamiast tego 10 stron, ale 10 stron, które są bardzodynamiczny. Po zalogowaniu się użytkownika w prawym rogu pojawi się mała plakietka użytkownika. To nie jest dynamiczne. Pokazuje tylko kilka fajnych rzeczy, takich jak „wynik” użytkownika i jego najnowsze selfie. Sprytne rzeczy przechowujesz w pamięci podręcznej, aby można je było łatwo odzyskać. Teraz możesz przejść na dwa sposoby. Jeśli jesteś purystą MVC po stronie klienta, po prostu pobierasz dane znaczka po dostarczeniu początkowego ładunku HTML, podobnie jak wszystkie inne dane. Ale może nie jesteś purystą. Może jesteś przeciwieństwem purysty. Może jesteś impurystą. Zamiast dostarczać początkowy kod HTML, dostarczać trochę kodu JavaScript, który będzie przesyłany z powrotem na serwer, przesyłaj za pomocą JavaScript, aby pobrać dane znaczków, a następnie ostatecznie scalić te dane w widoku za pomocą MVC po stronie klienta,to jako twój początkowy HTML. Po dostarczeniu początkowego kodu HTML kontynuujesz typowe wygłupy MVC po stronie klienta.

Więc ... MVC na serwerze i na kliencie to tylko wygodny sposób na uporządkowanie kodu, który był bałaganem w 2001 roku. Nie musisz wybierać jednego lub drugiego. Możesz wybrać jedno i drugie. To prawda, że ​​im więcej robisz po dostarczeniu początkowego kodu HTML, tym mniej potrzebujesz MVC po stronie serwera. Mimo to jest do Twojej dyspozycji, jeśli potrzebujesz. Na przykład pracowałem nad aplikacją ASP.NET MVC / Angular, w której zewnętrznymi szablonami Angular może być .NET MVC ActionResult. Oznacza to, że kontroler serwera może scalić dane z jego widokiem, dostarczyć je do Angulara jako szablon, a kontroler Angulara może następnie scalić swoje dane z tym widokiem. Nie twierdzę, że to dobry pomysł, ale pokazuje tylko, że jedna forma MVC nie powoduje, że druga jest przestarzała.

Poza tym, bez względu na to, jak wdrożysz Angular, będziesz potrzebować sposobu na dostarczenie początkowego kodu HTML, szablonów i, co najważniejsze, danych. Dlaczego nie skorzystać z platformy, która to ułatwia? Istnieje wiele, ale .NET MVC nie jest garbaty. Tak jak powiedziałem, możesz sprawić, że początkowe szablony HTML i zewnętrzne Angular będą efektem akcji MVC, ale jeszcze lepiej, możesz użyć interfejsu API sieci .NET do dostarczania danych. Web API jest tak smaczny jak kompot morelowy.

Podsumowując: MVC to tylko wzór. Możesz użyć tego wzoru na dowolnej liczbie warstw fizycznych. Nie można go zużyć. Używaj go swobodnie, jeśli ma to sens. Poza tym Angular i tak może nie być MVC (tak mówią ludzie, którym zależy na tych rzeczach), więc możesz go używać z narzędziem, które ma w nazwie „MVC”. Do diabła, nawet jeśli jest to MVC, miksuj i dopasowuj według potrzeb.

Scant Roger
źródło
3
Niesamowita odpowiedź. Bardzo dziękuję za wyjaśnienie +1
Natalie,
Czy możesz mi powiedzieć, na przykład, czy istnieje interfejs WWW, który dostarcza mi danych, a chcę pokazać te dane w siatce, czy wykonuję pętlę i szablony za pomocą Angulara lub MVC? Czy w jaki sposób dzwonię do usługi interfejsu API? Jak od początku projektu decydujesz, w którą stronę pójdziesz?
Natalie,
1
@ Natalie Jeśli dane pochodzą z interfejsu API sieci Web, prawdopodobnie pobierasz je po stronie klienta. Oznacza to, że korzystasz z Angulara, a nie .NET MVC. Nie zapętlasz jawnie. Wiąż dane z tabelą / tabelą za pomocą ngRepeat . Aby pobrać dane, prawdopodobnie użyjesz modułu $ http i wywołasz punkt końcowy interfejsu API sieci Web. Jeśli chodzi o podejmowanie decyzji, które podejście użyć, to dziwne. Nie ma czarno-białej odpowiedzi. Musisz eksperymentować, oceniać i podążać za instynktem.
Scant Roger,
... jedno słowo ostrzeżenia. Jeśli wcześniej nie korzystałeś z Angulara lub innego frameworka JavaScript z pełną obsługą, musisz poświęcić kilka godzin na naukę lin. Niekoniecznie są one proste. Mogę cię jednak zapewnić, że na dłuższą metę ułatwią ci życie. Pracuj ciężko. Zostać przy tym. Poradzisz sobie świetnie.
Scant Roger,
1
@ScantRoger Przepraszam, ale twoja odpowiedź nie wyjaśniła mi wszystkiego. Jeśli używam frameworku po stronie serwera MVC, gdzie widok jest agnostyczny, w jaki sposób powiązać z nim Angular? Serwer (internetowy interfejs API) zawiera już definicje modelu i kontrolera. Więc jeśli użyję Angulara, znów będę narzucony MVC. Czy to w końcu MCMCM ...? (Definicje modeli i kontrolerów zarówno po stronie klienta, jak i serwera) Lub dlatego, że nie powinienem używać frameworka MVC po stronie klienta, takiego jak Angular, jeśli już używam frameworku MVC dla mojego interfejsu API sieci Web
Abdul
17

ASP.NET MVC jest strukturą po stronie serwera; nie ma znaczenia, jakich bibliotek JavaScript używasz. AngularJS to biblioteka po stronie klienta, która nie dba o to, jaka technologia po stronie serwera zasila witrynę - może to być Python, ASP.NET MVC, a nawet zwykły stary zbiór statycznych plików HTML przechowywanych bezpośrednio na dysku.

Zarówno ASP.NET MVC, jak i AngularJS są kompatybilne i istnieje wiele projektów, które wykorzystują je razem.

Czy potrzebujesz obu? Nie całkiem. Zależy to całkowicie od potrzeb twojego projektu.

  • Jeśli Twoja witryna jest dynamiczna, musisz użyć skryptów po stronie serwera. Możesz użyć ASP.NET, a fakt, że używasz AngularJS, nie spowoduje, że kod po stronie serwera będzie bardziej MVC. Jeśli chcesz mieć możliwość skonfigurowania aplikacji po stronie serwera jako MVC, raczej wybierzesz ASP.NET MVC.

  • Podobnie fakt, że używasz ASP.NET MVC, nie implikuje niczego o strukturze kodu po stronie klienta. Możesz umieścić cały JavaScript w jednym pliku bez zastanowienia się nad strukturą i być z tego zadowolonym (dopóki projekt nie zacznie się rozwijać). Tutaj ponownie AngularJS przedstawia się jako sposób na uporządkowanie aplikacji po stronie klienta.


Uwaga dodatkowa: otagowałeś swoje pytanie ASP.NET MVC 3. O ile nie jest to starszy projekt, który musisz utrzymać lub nie masz określonych ograniczeń podczas hostowania aplikacji na starszych serwerach, które nie były aktualizowane przez ostatnie cztery lata, możesz użyć ASP Zamiast tego .NET MVC 4 lub 5.

Arseni Mourzenko
źródło
1
dzięki MainMa. Wiem, że AngularJS jest po stronie klienta, a MVC po stronie serwera. Wiem również, że inne biblioteki, takie jak kierownica, knockoutjs mogą być używane w MVC.NET, a Angular może być używany w aplikacjach php, java. Pytam, dlaczego używać obu z nich razem, ponieważ oba robią to samo, co „MVC”, ale jedno jest po stronie klienta, a drugie po stronie serwera. Po co mieszać frameworki MVC po stronie klienta i serwera? Czy nie możemy zrobić aplikacji, która jest tylko aplikacją Angular? Lub aplikacja, która jest tylko aplikacją MVC.net?
Natalie,
@ Natalie: Rozumiem. Zredagowałem odpowiedź, aby podać więcej informacji na ten temat. Krótka odpowiedź polega na połączeniu tych dwóch struktur w projektach, w których sensowne jest posiadanie określonej struktury zarówno po stronie serwera, jak i klienta.
Arseni Mourzenko,
Czy możesz mi powiedzieć, na przykład, czy istnieje interfejs WWW, który dostarcza mi danych, a chcę pokazać te dane w siatce, czy wykonuję pętlę i szablony za pomocą Angulara lub MVC? Czy w jaki sposób dzwonię do usługi interfejsu API? Jak od początku projektu decydujesz, w którą stronę pójdziesz?
Natalie,
Mam w głowie te same pytania. Nie mogłem w ogóle znaleźć powodu, aby używać asp.net MVC. To znaczy, wygląda na to, że Asp.net Web API po stronie serwera i Angular po stronie klienta wystarczyłyby. Ale pomyślałem najpierw; Web API = warstwa dostępu do danych, Asp.Net MVC = warstwa logiki biznesowej, kątowa = warstwa interfejsu użytkownika. Ale od strony Angulara możemy wykonywać tylko wywołania API sieci Web, więc nie możemy używać strony serwera Asp.Net MVC. Myślę, że potrzebujemy dobrego przykładu, dlaczego możemy potrzebować użyć Asp.Net MVC.
Salim
9

Jeśli korzystasz z Visual Studio, jest nowy szablon strony internetowej MVC „aplikacja pojedynczej strony”, który zawiera kontrolery kątowe i MVC Web Api.

Działa to dobrze, ponieważ kod po stronie serwera MVC zapewnia punkty końcowe json do wywołania kątowego kodu po stronie klienta.

Dodatkowo możesz użyć kontrolerów MVC do obsługi podstawowego widoku HTML lub widoków dla aplikacji na jednej stronie. daje to moc generowania po stronie serwera, autoryzacji, przekierowań, obsługi błędów itp

Często potrzebujesz niewielkiej ilości html / javascript generowanej przez serwer nawet na jednej stronie aplikacji, takich jak adresy URL punktów końcowych dla różnych środowisk, różnych języków, a nawet dziwne strony uwierzytelniające, które mogą być łatwiejsze do wykonania po stronie serwera.

Ewan
źródło
1
Podczas tworzenia standardowego szablonu SPA w VS 2015 CE widzę bootstrap, jquery, nokaut, odpowiedź i sammy w folderze skryptu, ale nie kątowy. Czy coś brakuje?
TK-421
2

3 lata później użyj ASP.NET Web API do obsługi danych, a Angular (js lub nowszy) do struktury aplikacji po stronie klienta. Jeśli tworzysz witrynę statyczną, po prostu użyj ASP.NET MVC.

użytkownik441521
źródło