Чи повинен я використовувати як AngularJS, так і ASP.NET MVC?


58

Я почав вивчати AngularJS та ASP.NET MVC, але не знаю, навіщо використовувати їх обох разом в одному проекті?

Чи не обидва вони MVC? Чи повинен я використовувати їх обох в одній програмі? Це не одне чи інше?

Відповіді:


74

Якщо ви будуєте програму на одній сторінці (SPA) , вам, ймовірно, не потрібен "MVC" в ASP.NET MVC . Перегляди, особливо динамічні погляди, ймовірно, доставляються / маніпулюються на стороні клієнта. Кутові ручки, які просто чудово.

Але, можливо, ви не хочете 100% SPA. Тоді що? Уявіть замість цього 10 сторінок, але 10 сторінок, які дужединамічний. Після входу користувача у правому куті з’являється невеликий значок користувача. Це не динамічно. Він просто показує кілька чудових речей, як "оцінка" користувача та його останній selfie. Ви кешуєте чудові речі, щоб їх було легко знайти. Тепер ви можете піти двома способами з цим. Якщо ви є клієнтом MVC-спеціаліста, ви просто отримуєте дані значка після доставки початкового корисного навантаження HTML, як і всі інші дані. Але, можливо, ти не пурист. Можливо, ти протилежний пуристу. Можливо, ти імурист. Таким чином, замість доставки початкового HTML, доставки JavaScript, який буде розміщений на вашому сервері, публікація через JavaScript, щоб захопити дані значків, а потім, зрештою, об'єднати ці дані у представлення даних через клієнтський MVC,що в якості вихідного HTML. Після доставки початкового HTML ви переходите до типових витівків MVC на стороні клієнта.

Отже ... MVC на сервері та на клієнті - це просто зручний спосіб впорядкування коду, який раніше був у безладі 2001. Не потрібно вибирати той чи інший. Ви можете вибрати обидва. Зрозуміло, чим більше ви робите після доставки початкового HTML, тим менше вам потрібен MVC на стороні сервера. Тим не менш, він є для вас, якщо вам це потрібно. Наприклад, я працював над програмою ASP.NET MVC / Angular, де зовнішні шаблони Angular насправді можуть бути .NET MVC ActionResult. Це означає, що ваш серверний контролер може об'єднати дані у його представлення, доставити їх у Angular як шаблон, а контролер Angular може потім об'єднати свої дані у подання. Я не кажу, що це гарна ідея, але це просто показує, що одна форма MVC не робить іншу застарілою.

Крім того, як би ви не розгорнули Angular, вам знадобиться спосіб надати цей початковий HTML, шаблони та головне дані. Чому б не скористатися платформою, яка робить це легким? Їх багато, але .NET MVC не сутулиться. Як я вже говорив, ви можете зробити початкові HTML та зовнішні кутові шаблони результатом дії MVC, але ще краще, ви можете використовувати веб-API .NET для доставки даних. Веб-API такий же смачний, як і компот з абрикосів.

Підсумовано: MVC - це лише зразок. Ви можете використовувати цей візерунок на будь-якій кількості фізичних шарів. Його не можна використати. Використовуйте його вільно, якщо це має сенс. Крім того, Angular може не бути MVC у будь-якому випадку (так кажуть люди, які переймаються цими речами), тому сміливо використовуйте його з інструментом, який має "MVC" у назві. Пекло, навіть якщо це MVC, перемішуйте і поєднуйте за бажанням.


3
Дивовижна відповідь. Дякую за ваше пояснення +1
Наталі

Ви можете мені сказати, наприклад, якщо є веб-api, який надає мені дані, і я хочу показати ці дані в сітці, чи роблю я циклічне та шаблонне використання за допомогою Angular або MVC? Чи дзвоню веб-службі api, за допомогою якої як? Як ви вирішили з початку проекту, яким шляхом ви йдете?
Наталі

1
@Natalie Якщо дані з веб-API, ви, ймовірно, отримаєте їх на стороні клієнта. Це означає, що ви зв’язуєте у кутовій, а не .NET MVC. Ви явно не циклічно. Ви прив'язуєте дані до своєї сітки / таблиці за допомогою ngRepeat . Щоб отримати дані, ви, ймовірно, використовуєте модуль $ http і дзвоните в кінцеву точку веб-API. Щодо вирішення, який підхід використовувати, то це химерно. Чорно-білої відповіді немає. Ви повинні експериментувати, оцінювати та слідувати своїм інстинктам.
Мізерний Роджер

... одне обережне слово. Якщо ви раніше не використовували кутовий або інший повний сервіс JavaScript, вам доведеться витратити кілька годин, вивчаючи мотузки. Вони не обов'язково прості. Я можу запевнити вас, що вони полегшать вам життя в довгостроковій перспективі. Важко працювати. Дотримуйтесь його. Ви зробите чудово.
Мізерний Роджер

1
@ScantRoger Вибачаюсь, але ваша відповідь не зрозуміла для мене речі. Якщо я використовую MVC-серверну рамку, де View є агностичним, як я зв'язати з ним Angular? Сервер (веб-API) вже містить визначення моделі та контролера. Отже, якщо я використовую Angular, мені знову накладають MVC. Так це в кінцевому підсумку стає MCVCM ...? (Визначення моделі та контролера як на стороні клієнта, так і на стороні сервера) Або в тому, що я не повинен використовувати рамку MVC на стороні клієнта, таку як Angular, якщо я вже використовую рамку MVC для свого веб-API
Abdul

17

ASP.NET MVC - це серверна основа; не важливо, якими бібліотеками JavaScript ви користуєтесь. AngularJS - це клієнтська бібліотека, яка не байдуже, яка технологія на стороні сервера надає повноваження веб-сайту - це може бути Python, ASP.NET MVC або навіть звичайний старий набір статичних HTML-файлів, що зберігаються безпосередньо на диску.

ASP.NET MVC та AngularJS сумісні, і існує безліч проектів, які використовують їх разом.

Чи потрібно використовувати обидва? Не зовсім. Це повністю залежить від потреб вашого проекту.

  • Якщо ваш веб-сайт динамічний, вам доведеться використовувати деякі сценарії на стороні сервера. Ви можете використовувати ASP.NET, і той факт, що ви використовуєте AngularJS, не зробить ваш код на стороні сервера MVC. Якщо ви хочете мати змогу структурувати свою серверну програму як MVC, скоріше виберіть ASP.NET MVC.

  • Так само факт, що ви використовуєте ASP.NET MVC, нічого не означає про структуру коду вашого клієнта. Ви можете помістити весь свій JavaScript в один файл, не замислюючись про структуру, і радіти цьому (поки проект не почне рости). Тут знову AngularJS представляє себе як спосіб структурувати ваше додаток на стороні клієнта.


Побічна примітка: ви помітили своє запитання ASP.NET MVC 3. Якщо це не є застарілим проектом, який ви повинні підтримувати, або у вас є конкретні обмеження під час розміщення програми на застарілих серверах, які не оновлювалися протягом останніх чотирьох років, ви можете використовувати ASP .NET MVC 4 або 5 замість цього.


1
дякую MainMa Мені відомо, що AngularJS - це клієнт, а MVC - сервер. Я також знаю, що інші бібліотеки, такі як рулі, нокаути, можуть використовуватися в MVC.NET, а Angular можна використовувати в програмах php, java. Мене задають питання, чому використовувати їх обох разом, оскільки вони обидва роблять те саме, що є "MVC", але одна сторона - клієнт, а одна - серверна. Навіщо змішувати рамки MVC на стороні клієнта та сервера? Чи не можемо ми зробити програму, яка є лише програмою Angular? Або додаток, який є лише програмою MVC.net?
Наталі

@Natalie: Я бачу. Я відредагував відповідь, щоб надати більше інформації про це. Коротка відповідь полягає в тому, що ви змішуєте ці дві рамки в проектах, де є сенс мати конкретну структуру як на сервері, так і на стороні клієнта.
Арсеній Муренко

Ви можете мені сказати, наприклад, якщо є веб-api, який надає мені дані, і я хочу показати ці дані в сітці, чи роблю я циклічне та шаблонне використання за допомогою Angular або MVC? Чи дзвоню веб-службі api, за допомогою якої як? Як ви вирішили з початку проекту, яким шляхом ви йдете?
Наталі

У мене в голові такі ж запитання. Я не зміг знайти причину використовувати asp.net MVC взагалі. Я маю на увазі, схоже, що веб-API Asp.net на стороні сервера та Angular на стороні клієнта буде достатньо. Але я подумав спочатку; Web API = Шар доступу до даних, Asp.Net MVC = Шар бізнес-логіки, кутовий = рівень UI. Але з кутової сторони ми можемо робити лише дзвінки Web API, тому ми не можемо використовувати сервер Asp.Net MVC. Я думаю, що нам потрібен хороший приклад, чому нам може знадобитися використання Asp.Net MVC.
Салим

9

Якщо ви використовуєте візуальну студію, є новий шаблон веб-сайту MVC, що містить кутові та контролери MVC Web Api.

Це добре працює, оскільки ваш код MVC на стороні сервера надає кінцеві точки json для кутового коду клієнтської сторони для виклику.

Крім того, ви можете використовувати контролери MVC, щоб обслуговувати основний HTML-перегляд або представлення даних для вашої програми на одній сторінці. це дає вам можливість генерації сервера, авторизації, переадресації, обробки помилок тощо

Часто вам потрібна невелика кількість створених сервером html / javascript навіть на одній сторінці програми, такі речі, як URL-адреси кінцевих точок для різних середовищ, різних мов або навіть непарна сторінка аутентифікації, що може бути простіше зробити на сервері.


1
Під час створення стандартного шаблону SPA у VS 2015 CE я бачу завантажувальний, jquery, нокаут, відповідь та саммі в папці сценарію, але без кутового. Я щось пропускаю?
TK-421,

2

Через 3 роки використовуйте веб-API ASP.NET, щоб обслуговувати ваші дані та Angular (js або новіші), щоб структурувати ваш додаток на стороні клієнта. Якщо ви створюєте статичний сайт, просто використовуйте ASP.NET MVC.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.