Книги и документация по MVC просто нагромождают использование терминов без учета состояния и состояния. Честно говоря, я просто не могу понять, о чем говорят книги. Они не приводят пример, чтобы понять какое-либо из этих состояний, вместо того, чтобы просто сказать, что HTTP не имеет состояния и с ASP.NET MVC Microsoft поддерживает это. Я скучаю по некоторым фундаментальным знаниям, потому что я не могу понять, что с состоянием и почему с состоянием и то же самое относится и к лицам без гражданства.
Простой и короткий пример, в котором говорится о кнопке или текстовом поле, например элементе управления, может быть проще для понимания, я полагаю.
источник
Stateless - нет памяти (состояния), которая поддерживается программой
Stateful - программа имеет память (состояние)
Чтобы проиллюстрировать концепцию состояния, я определю функцию с состоянием и функцию без состояния
Stateless
Stateful
Как уже говорили другие, http по своей сути не имеет состояния. Таким образом, государство должно быть встроено в ваши приложения.
Представьте себе запрос через Интернет, где у вас есть клиентский браузер, взаимодействующий с процессом сервера. Чтобы поддерживать состояние по протоколу HTTP без сохранения состояния, браузер обычно отправляет на сервер идентификатор сеанса при каждом запросе. Для каждого запроса сервер будет выглядеть как «ах, этот парень». Информация о состоянии затем может быть найдена в памяти на стороне сервера или в базе данных на основе этого идентификатора сеанса.
В среде без состояния вам не понадобится этот идентификатор сеанса. Каждый запрос будет содержать всю информацию, необходимую серверу для обработки. Но многим приложениям необходимо поддерживать состояние, чтобы отслеживать, аутентифицирован ли сеанс для просмотра определенного контента или для отслеживания действий пользователя. Вы не хотите отправлять учетные данные пользователя по проводам для каждого запроса.
источник
без гражданства означает, что нет памяти о прошлом. Каждая транзакция выполняется так, как если бы она была сделана в первый раз.
Statefull означает, что есть память о прошлом. Предыдущие транзакции запоминаются и могут повлиять на текущую транзакцию.
источник
По моему простому мнению, разница между ASP.NET (с сохранением состояния) и ASP.NET-MVC (без сохранения состояния) может быть изолирована тем фактом, что первый предоставляет элементы управления на стороне сервера, а другой - нет.
Стоит отметить, что подход веб-форм ASP.NET направлен на переход старых программистов на VB и VC ++, которые используются в модели, управляемой моделью событий, к быстрому быстрому обучению веб-программированию, следуя той же парадигме модели событий, как вы щелкаете мышью. кнопка и вуаля вы вызываете событие! Все, что вам нужно сделать сейчас, это написать свой код в обработчике событий. Из-за этого ASP.NET требовалось иметь такие понятия, как состояние просмотра и обратные вызовы, для отслеживания состояния элементов управления на стороне сервера при каждой передаче в оба конца.
ASP.NET-MVC, однако, не использует серверные элементы управления, поэтому ему не нужно поддерживать состояние. Модель MVC разделяет проблемный домен на три раздела, чтобы данные доставлялись клиенту упорядоченным образом.
Таким образом, серверные элементы управления - это то, что отличает их от того, что они не содержат состояний и не имеют состояний.
источник
Дополнение к @coder точный ответ.
Идея государства - помнить предыдущие данные .
Например, у вас есть список управления на сервере со значениями «A, B, C» и «A». Список отправляется в браузер клиента. Вы выбираете «B». И отправьте обратно на сервер. Как вы узнали бы, что значение изменилось?
ASP.NET
Microsoft использует термин ViewState в ASP.NET. Существует огромное недопонимание среди разработчиков по этому поводу.
ViewState содержит все начальное состояние списка в
<input type="hidden" value="base64 encoded" />
: значения «A, B, C» и пометка «A is selected».Затем с обратной версией браузер отправляет ViewState и «B выбран» на сервер. ASP.NET восстанавливает начальное состояние списка и применяет новый выбор «B». Это было сделано, чтобы заманить разработчиков WinForms (упомянутых @Ronald). На веб-сервере вы можете подписаться на изменения списка
listObject.Changed += OnChanged
.ASP.NET MVC
Проблема с ViewState заключается в размере. В течение многих лет разработчики .NET вынуждали передавать килобайты бесполезной информации, например, состояния 20 элементов управления для каждой передачи туда и обратно.
Новый подход заключается в отправке только нового и небольшого значения «B».
Или, если вы хотите отслеживать изменение с «A» на «B», то реализуйте его самостоятельно. Использование JavaScript и отправка «Был А, теперь Б». Или сохранить и восстановить состояние по идентификатору в SQL Server.
источник
Операция с состоянием изменяет или требует некоторого состояния системы, а операция без состояния - нет.
Примером текстового поля с состоянием может быть ранее отредактированный комментарий к StackExchange - текстовое поле должно отображать ваш предыдущий комментарий и знать пост-ветку, с которой он был связан, чтобы принять и обработать ваш ввод.
Общей формой комментария по электронной почте с тегом mailto: будет текстовое поле без состояния - оно принимает ваш ввод и отправляет его в почтовое приложение вашей рабочей станции без сохранения какой-либо информации.
источник