Stateless vs Stateful - я мог бы использовать конкретную информацию

Мне интересны статьи, в которых есть конкретная информация о программировании без учета состояния и состояния. Мне интересно, потому что я хочу узнать больше об этом, но я действительно не могу найти хорошие статьи об этом. Я прочитал десятки статей в Интернете, которые смутно обсуждают эту тему, или они говорят о веб-серверах и сеансах - которые также относятся к состоянию с сохранением без сохранения состояния, но меня интересует создание атрибутов без сохранения состояния с сохранением состояния в коде., Пример: я слышал, что BL-классы не имеют состояния по своему дизайну, классы сущностей (или, по крайней мере, так я их называю - например, Person(id, name, ..)) - с состоянием и т. Д.

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

В любом случае, очень коротко, вот что я знаю о сохранении состояния без сохранения состояния:

С сохранением состояния (например, WinForms): хранит данные для дальнейшего использования, но ограничивает масштабируемость приложения, поскольку оно ограничено пределами процессора или памяти

Без сохранения состояния (как в ASP.NET - хотя ASP пытается сохранять состояние с помощью ViewStates): после завершения действий данные передаются, а экземпляр возвращается в пул потоков (аморфный).

Как вы можете видеть, это довольно расплывчатая и ограниченная информация (и сфокусированная на взаимодействии с сервером), поэтому я был бы очень признателен, если бы вы могли предоставить мне более вкусную информацию:)

8 ответов

Решение

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

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

Еще одна область, которую вы могли бы изучить, чтобы лучше понять, - это веб-сервисы RESTful. Они по своему замыслу являются "лицами без состояния", в отличие от других веб-технологий, которые пытаются каким-то образом сохранять состояние. (На самом деле то, что вы говорите, что ASP.NET не имеет состояния, неверно - ASP.NET изо всех сил старается сохранить состояние с помощью ViewState и определенно должна характеризоваться как сохраняющая состояние. ASP.NET MVC, с другой стороны, является технологией без сохранения состояния). Есть много мест, в которых обсуждается "безгражданство" веб-сервисов RESTful (например, этот блог), но вы могли бы снова начать с SO вопроса.

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

Stateful означает, что есть память о прошлом. Предыдущие транзакции запоминаются и могут повлиять на текущую транзакцию.

Stateless:

// The state is derived by what is passed into the function

function int addOne(int number)
{
    return number + 1;
}

Stateful:

// The state is maintained by the function

private int _number = 0; //initially zero

function int addOne()
{
   _number++;
   return _number;
}

Ссылка: https://softwareengineering.stackexchange.com/questions/101337/whats-the-difference-between-stateful-and-stateless

Приложение с состоянием - это приложение, в котором хранится информация о том, что произошло или изменилось с момента его запуска. Любая общедоступная информация о том, в каком "режиме" он находится, сколько записей обработано или что-то еще, делает его состоящим из состояния.

Приложениябез сохранения состояния не предоставляют эту информацию. Они дают один и тот же ответ на один и тот же запрос, функцию или вызов метода каждый раз. HTTP не имеет состояния в необработанном виде - если вы выполняете GET для определенного URL, вы получаете (теоретически) один и тот же ответ каждый раз. Исключением, конечно, является случай, когда мы начинаем добавлять отслеживание состояния сверху, например, с веб-приложениями ASP.NET:) Но если вы подумаете о статическом веб-сайте, содержащем только HTML-файлы и изображения, вы поймете, что я имею в виду.

Прилагательное Stateful или Stateless относится только к состоянию разговора, оно не связано с концепцией функции, которая обеспечивает один и тот же вывод для одного и того же ввода. В таком случае любое динамическое веб-приложение (с базой данных за ним) будет службой с сохранением состояния, что, очевидно, является ложным. Имея это в виду, если я возлагаю задачу на сохранение состояния разговора в лежащей в основе технологии (такой как сеанс coockie или http), я реализую службу с сохранением состояния, но если вся необходимая информация (контекст) передается как параметры I ' m внедряет службу без сохранения состояния. Следует отметить, что даже если переданный параметр является "идентификатором" состояния разговора (например, тикет или идентификатор сеанса), мы по-прежнему работаем в службе без сохранения состояния, поскольку диалог не имеет состояния (тикет постоянно передается между клиентом и сервер), и это две конечные точки, так сказать, "с состоянием".

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

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

HTTP по своей природе не имеет состояния по причине... В случае веб-сервера состояние с состоянием означает, что ему нужно будет помнить "состояние" пользователя для его последнего соединения и / или сохранять открытое соединение с запросчиком. Это было бы очень дорого и "напряженно" в приложении с тысячами одновременных подключений...

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

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

  • Классы сущностей должны быть с состоянием
  • Классы помощник / работник не должны быть с состоянием.

Мы делаем Webapps полными, переопределяя поведение HTTP без сохранения состояния с помощью объектов сеанса. Когда мы используем сеанс, состояние объекта переносится, но мы все еще используем только HTTP.

Другие вопросы по тегам