Angular.js и ASP.NET MVC 4

У меня есть проект ASP.NET MVC 4, и я застрял в архитектурном решении, на котором JavaScript framework или библиотека использует Angular.js или Knock.js. В настоящее время я склоняюсь к использованию Angular.js над Knockout.js, но не хочу выяснять, что на полпути во время разработки проекта я допустил ошибку.

Вот какой фон:

  • Нам нужна привязка данных двухсторонней модели.
  • Нам нужна возможность проверки просмотров. Я хочу иметь возможность выполнять сквозное модульное тестирование. Кроме того, мы используем непрерывную интеграцию.
  • "Сохранить изменения". то есть, если пользователь вносит изменения на странице, нам нужна возможность обнаруживать любые изменения и предлагать пользователю сохранить их изменения до того, как они перейдут от страницы.
  • "Уведомления". то есть пользователь будет зарегистрирован примерно через 8 часов и должен быть уведомлен и обновлен об изменениях, сделанных другими пользователями (ошибки, изменения статуса данных и т.п.).
  • Нам нужно "будущее доказательство" нашего приложения. В настоящее время бизнес-единица не решила, нужно ли нам поддерживать мобильные устройства, но я знаю, что это всего лишь вопрос времени.
  • Наша команда состоит из разработчиков с различными уровнями опыта от самых младших до старших разработчиков.
  • В настоящее время наши модели сложны и могут получить еще больше
  • Нам также необходимо рассмотреть RAD, повторное использование кода и ремонтопригодность

Я прочитал отличный ответ здесь и посмотрел интервью Скотта Аллена о Angular здесь

Поскольку мы не можем изменить нашу существующую архитектуру ASP.NET MVC 4, чтобы использовать что-то на стороне сервера, например, веб-API, у меня есть проблемы при попытке реализовать Angular.js с MVC 4. Из-за этого у нас будет две модели на сервере и одна на клиенте?

Я не ищу "что лучше" обсуждение Angular и нокаута, потому что я думаю, что у них обоих есть свои плюсы и минусы. Я ищу фактический код для реализации фреймворка или библиотеки JavaScript в приложении ASP.NET MVC 4. Мне нужно решение, с которым я могу жить через 2 года:)

Любые идеи или предложения? Может быть, ответ не Knock или Angular, а какая-то другая фреймворк JavaScript?

Ответ 1

Рад видеть, что эти вопросы были интересны сообществу;) Просто для полноты здесь, что я закончил:

Я пошел с AngularJS и ASP.NET MVC 4 и был рад, что сделал. Хотя, Angular имеет крутую кривую обучения, но ее стоит того, что имеет силу директив.

  • Нам нужна привязка данных с двухсторонней моделью. В некоторых случаях мне нужно было установить некоторые начальные значения, поступающие от контроллера MVC. Я использовал атрибут ng-init для выполнения этого.
  • Нам нужна возможность тестирования просмотров - я следил за документами AngularJS для тестирования
  • "Сохранить изменения" - я реализовал это с помощью директивы в Angular
  • Функция "Уведомления" - я реализовал это с помощью toastr.js и директив (schweet)
  • Нам нужно "будущее доказательство" нашего приложения - я не знаю планов Google для AngularJS, но после работы с AngularJS я не вижу, чтобы он никуда не собирался в любое время и ожидал, что он станет более широко принят:)

Ответ 2

моя стоимость в 2 цента.

преамбула - я работал как с angular, так и с нокаутом. Я нахожусь на моем третьем нетривиальном интерфейсе, построенном с MVVM/MVC lib.

Я начал с нокаута, потому что его MVVM очень похож на механику wpf/silverlight. И это работает хорошо. Учебники и документация являются на высшем уровне. Все ваши кодеры смогут работать с knockout.js в течение нескольких дней или если они использовали mvvm под .net, то в течение нескольких часов.

Однако в эти дни я использую angular и, вероятно, придерживаюсь его по следующим причинам.

  • angular - полная структура - нокаут - это действительно только 2 . вам все еще нужны другие библиотеки, такие как backbone.js/jquery для выполнения остальной части вашей работы.

  • angular имеет инъекцию зависимости. который идеально подходит для добавления насмехаясь за тестирование, а также придавая структуру вашему коду.

  • angular рассматривает обычные переменные JS как наблюдаемые в пределах его $scope объект. это означает, что вам не нужно объявлять их особым образом.

Я не поклонник angular, я все же думаю, что они могут больше переходить к архитектуре MVVM вместо "смешной" гибридной архитектуры MVVM/MVC, которую они в настоящее время имеют.

Самая большая проблема с angular - это документация. По сравнению с нокаутом это горестно. Это добавит дополнительное время и затраты на то, чтобы ваши кодеры достигли скорости. Однако, когда они есть, в настоящее время это лучший выбор ИМХО.

Ответ 3

У меня нет большого количества вкладов на AngularJs, но хочу представить некоторые мысли о нокауте.

Нокаут - это, прежде всего, библиотека привязки данных для подключения представлений для просмотра модели, но на самом деле не предоставляет много возможностей. Я бы не рекомендовал использовать нокаут в качестве основной библиотеки для создания сложного клиентского веб-сайта.

Вы не упомянули, реализуете ли вы спа-функции (например, навигация по хэш-тегам) или используете ли вы главным образом виды на стороне сервера MVC (например, Razor). Если вы просто ищете быстрое привязку данных на уровне каждой страницы, я бы даже пересмотрел это. Для меня оба из них (angular или нокаут) предназначены для улучшения опыта разработки на стороне клиента - не столько на стороне сервера, сколько в MVC.

Если вы рассматриваете подход SPA, даже частично, вам, скорее всего, понадобится какая-то инфраструктура, обеспечивающая некоторый уровень контроля над жизненным циклом активации представления.

Что касается мощности передачи данных и надежности, я верю в Knockout. Я использую его широко и очень любил его. Если вам нравится ощущение нокаута, вы можете посмотреть Durandal. Durandal - это достойная инфраструктура, способная удовлетворить потребности многих веб-проектов "спа". Это клиентская платформа, построенная поверх нескольких проверенных библиотек, включая Knockout. Это немного (много) более легкое, чем Angular, и, возможно, проще для пользователя.

Мы строим довольно большой веб-сайт ASP.Net MVC, используя Durandal с Knockout, вместе с дополнительным фасадом, чтобы закрепить ситуацию с точки зрения разработки, а интеграция с ASP.Net MVC прямолинейна. Я не рекомендую использовать серверные нокауты, которые там есть; Я просто нахожу, что для ограничения реальной мощности шаблона MVVM.