Должен ли я использовать как AngularJS и ASP.NET MVC?

58

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

Разве они не являются средами MVC? Должен ли я использовать их обоих в одном приложении? Разве это не один или другой?

Натали
источник

Ответы:

74

Если вы создаете одностраничное приложение (SPA) , то вам, вероятно, не нужен «MVC» в ASP.NET MVC . Представления, особенно динамические, скорее всего доставляются / обрабатываются на стороне клиента. Угловые ручки, которые просто отлично.

Но, может быть, вы не хотите 100% SPA. Тогда что? Представьте вместо 10 страниц, но 10 страниц, которые оченьдинамичный. После того, как пользователь войдет в систему, в правом углу появится небольшой значок пользователя. Это не динамично. Это просто показывает несколько изящных вещей, таких как «оценка» пользователя и его последнее селфи. Вы кэшируете изящные вещи, чтобы их можно было легко найти. Теперь вы можете пойти двумя путями с этим. Если вы являетесь клиентом 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 и внешние шаблоны Angular результатом действия MVC, но, что еще лучше, вы можете использовать .NET Web API для доставки данных. Веб-API так же вкусен, как и абрикосовый компот.

Подводя итог: MVC это просто шаблон. Вы можете использовать этот шаблон на любом количестве физических уровней. Это не может быть использовано. Используйте это свободно, если это имеет смысл. Кроме того, Angular в любом случае не может быть MVC (так говорят люди, которые заботятся об этих вещах), поэтому не стесняйтесь использовать его с инструментом, в названии которого есть «MVC». Черт, даже если это MVC, смешивай и подбирай по желанию.

Скудный Роджер
источник
3
Удивительный ответ. Большое спасибо за ваше объяснение +1
Натали
Можете ли вы сказать мне, например, если есть веб-API, который предоставляет мне данные, и я хочу показать эти данные в сетке, я делаю циклы и шаблоны с помощью Angular или MVC? Должен ли я позвонить в службу веб-API, используя как? Как вы решаете с самого начала проекта, в какую сторону идти?
Натали
1
@Natalie Если данные взяты из Web API, вы, вероятно, получаете их на стороне клиента. Это означает, что вы используете Angular, а не .NET MVC. Вы явно не зацикливаетесь. Вы связываете данные с вашей сеткой / таблицей, используя ngRepeat . Чтобы получить данные, вы, вероятно, будете использовать модуль $ http и вызывать конечную точку Web API. Что касается решения, какой подход использовать, это странно. Там нет черно-белого ответа. Вы должны экспериментировать, оценивать и следовать своим инстинктам.
Скудный Роджер
... одно слово предостережения. Если вы раньше не использовали Angular или другой полнофункциональный JavaScript-фреймворк, вам придется потратить несколько трудных часов на изучение веревок. Они не обязательно просты. Я могу заверить вас, однако, что они сделают вашу жизнь проще в долгосрочной перспективе. Прилагать усилия. Придерживаться. У тебя все получится.
Скудный Роджер
1
@ScantRoger Я прошу прощения, но ваш ответ не прояснил для меня вещи. Если я использую серверную инфраструктуру MVC, где представление не зависит, как мне связать с ним Angular? Сервер (веб-API) уже содержит определения модели и контроллера. Итак, если я использую Angular, мне снова навязывают MVC. Так это в конечном итоге MCVCM ...? (Определения Model & Controller как на стороне клиента, так и на стороне сервера) Или по этой причине я не должен использовать инфраструктуру 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 можно использовать другие библиотеки, такие как handlebars, knockoutjs, а Angular можно использовать в приложениях php, java. То, что я спрашиваю, это зачем использовать их вместе, так как они оба делают одно и то же, что MVC, но один на стороне клиента, а другой на стороне сервера. Зачем смешивать инфраструктуры MVC на стороне клиента и на стороне сервера? Разве мы не можем сделать приложение, которое является только угловым приложением? Или приложение, которое является только приложением MVC.net?
Натали
@ Натали: Понятно. Я отредактировал ответ, чтобы предоставить больше информации об этом. Короткий ответ заключается в том, что вы смешиваете эти две структуры в проектах, где имеет смысл иметь конкретную структуру как на стороне сервера, так и на стороне клиента.
Арсений Мурзенко
Можете ли вы сказать мне, например, если есть веб-API, который предоставляет мне данные, и я хочу показать эти данные в сетке, я делаю циклы и шаблоны с помощью Angular или MVC? Должен ли я позвонить в службу веб-API, используя как? Как вы решаете с самого начала проекта, в какую сторону идти?
Натали
У меня в голове одни и те же вопросы. Я не мог найти причину использовать asp.net MVC вообще. Я имею в виду, похоже, что веб-API Asp.net на стороне сервера и Angular на стороне клиента будет достаточно. Но я сначала подумал; Web API = уровень доступа к данным, Asp.Net MVC = уровень бизнес-логики, Angular = уровень пользовательского интерфейса. Но со стороны Angular мы можем делать только вызовы Web API, поэтому мы не можем использовать серверную часть Asp.Net MVC. Я думаю, что нам нужен хороший пример, почему нам может понадобиться использовать Asp.Net MVC.
Салим
9

Если вы используете Visual Studio, есть новый шаблон веб-сайта MVC «одностраничное приложение», который включает в себя контроллеры Angular и MVC Web Api.

Это хорошо работает, потому что ваш код MVC на стороне сервера предоставляет конечные точки json для вызова углового кода на стороне клиента.

Кроме того, вы можете использовать контроллеры MVC для обслуживания основного представления HTML или представлений для вашего одностраничного приложения. это дает вам возможность генерации на стороне сервера, авторизации, перенаправления, обработки ошибок и т. д.

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

Ewan
источник
1
При создании стандартного шаблона SPA в VS 2015 CE я вижу в папке сценариев начальную загрузку, jquery, knockout, response и sammy, но без углов. Я что-то пропустил?
ТК-421
2

Спустя 3 года используйте ASP.NET Web API для обработки ваших данных и Angular (js или новее) для структурирования вашего приложения на стороне клиента. Если вы делаете статический сайт, тогда просто используйте ASP.NET MVC.

user441521
источник