Архитектура ASP.Net MVC - уровень обходного контроллера? - PullRequest
2 голосов
/ 23 мая 2011

Фон

Я работаю над созданием приложения ASP.Net MVC 3, которое использует:

  • JQueryUI для многих виджетов / элементов управления пользовательского интерфейса
  • Существующая система на основе SOA для операций CRUD (построена с использованием концепций DDD). Это включает в себя сервис, оптимизированный для операций чтения (см. CQRS). Сервисы RESTful (размещены в IIS / Appfabric) и, следовательно, могут быть доступны через простые HTTP-запросы из javascript. Сервисы также могут быть легко использованы напрямую, если обратиться к двоичному файлу сервиса и получить доступ от контроллера (или, конечно, через слои для отделения контроллера от сервиса и т. Д.).

Вопрос

Всегда ли уместно выполнять, например, операцию чтения, используя существующий RESTful API напрямую из javascript, а не вызывая метод Controller, который затем вызывает сервис? Или мы всегда должны использовать методы контроллера для любой операции CRUD?

Беспокойство

  • Кажется, нарушает правило, которое гласит, что вы никогда не должны обходить слой
  • С другой стороны, если мы всегда используем контроллер, он чувствует себя несколько избыточным, поскольку мы на этот раз оборачиваем службы по существу в другой RESTful API с использованием ASP.Net MVC.

Когда я начал смотреть на это, я понял, что в конечном итоге мы должны написать методы Controller для некоторых операций, где, возможно, манипулирование выводом страницы (представлением) проще всего, когда у нас есть данные в модели. Затем были бы другие операции, например, для извлечения списка сотрудников для простого поиска, например, для которых не нужно было бы использовать метод Controller и можно было бы перейти прямо к нашему существующему RESTful API. Это кажется грязным, и некоторые разработчики будут смущены тем, когда использовать метод Controller или существующий RESTful API напрямую.

Будем благодарны за любые мысли или предложения.

Спасибо.

1 Ответ

3 голосов
/ 08 июня 2011

Я полагаю, что это вопрос мнения, но я всегда проверяю контроллер на предмет последовательности, если не сказать ничего другого. Как вы говорите, если вы иногда используете API напрямую, но в других случаях проходите через контроллер, ваши разработчики могут запутаться в том, как им следует обращаться к данным.

Еще одна вещь, заслуживающая рассмотрения, заключается в том, что, используя контроллер, вы скрываете API от конечного пользователя, что, вероятно, хорошо, поскольку злоумышленники могут довольно легко изменить Javascript для выполнения действий, которые вы не ожидали ( хотя я ожидаю, что API будет иметь меры для решения этой проблемы), но если вы всегда используете контроллер, вы можете быть уверены, что пользователь не сможет напрямую манипулировать данными через API.

Даже если безопасность не является проблемой, как я уже сказал, я все равно буду использовать доступ к контроллеру каждый раз просто для того, чтобы быть последовательным.

...