Без громадянства проти державного - я міг би використати конкретну інформацію


94

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

Я думаю, що це важливо знати, тому що я вважаю, що якщо я можу це зрозуміти, я можу написати кращий код (наприклад, на увазі детальність).

У будь-якому випадку, дуже коротко, ось що я знаю, про стан "без стану":

Stateful (як WinForms): зберігає дані для подальшого використання, але обмежує масштабованість програми, оскільки вона обмежена обмеженнями центрального процесора або пам'яті

Без громадянства (як і ASP.NET - хоча ASP намагається створити статус ViewStates): Після завершення дій дані передаються, а екземпляр повертається до пулу потоків (Amorphous).

Як бачите, це досить розмита та обмежена інформація (і цілком зосереджена на взаємодії з сервером), тому я був би дуже вдячний, якщо б ви могли надати мені трохи смачніших шматочків інформації :)

Відповіді:


58

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

Програмування без стану пов'язане з математичним поняттям функції, яка при виклику з однаковими аргументами завжди повертає однакові результати. Це ключова концепція парадигми функціонального програмування, і я сподіваюся, що ви зможете знайти багато відповідних статей у цій галузі.

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


Добре, дякую за інформацію, я подивився посилання і знайшов цікаву інформацію! Хоча я все ще відкритий для більшого;)
Team-JoKi

Я додав ще одну сферу, згідно з якою статус без громадянства є важливим фактором (веб-служби RESTful).
kgiannakakis

Дякую за інформацію! Я б проголосував за вашу відповідь, але у мене поки що недостатньо представників> _>
Team-JoKi

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

85

Без громадянства означає, що немає пам’яті про минуле. Кожна транзакція виконується так, ніби вона робиться вперше.

Державне означає, що є пам'ять про минуле. Попередні транзакції запам'ятовуються і можуть вплинути на поточну транзакцію.

Без громадянства:

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

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

Стан:

// The state is maintained by the function

private int _number = 0; //initially zero

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

Довідник з: /software/101337/whats-the-difference-between-stateful-and-stateless


73

Додаток із станом - це програма, яка зберігає інформацію про те, що сталося або змінилося з моменту його запуску. Будь-яка загальнодоступна інформація про те, в якому "режимі" він перебуває, чи скільки записів оброблено, або що завгодно, робить його статусом.

Додатки без громадянства не виставляють жодної такої інформації. Вони дають однакову відповідь на один і той же запит, виклик функції або методу щоразу. HTTP не має статусу у необробленому вигляді - якщо ви отримуєте GET до певної URL-адреси, ви отримуєте (теоретично) однакову відповідь кожного разу. Звичайно, винятком є ​​те, коли ми починаємо додавати вигляд стану, наприклад, з веб-програмами ASP.NET :) Але якщо ви думаєте про статичний веб-сайт, який містить лише файли HTML та зображення, ви зрозумієте, що я маю на увазі.


18

Прикметник Stateful або Stateless стосується лише стану розмови, це не пов’язано з поняттям функції, яка забезпечує однаковий вихід для одного входу. Якщо так, будь-який динамічний веб-додаток (із базою даних за ним) буде послугою, що підтримує стан, що, очевидно, є помилковим. Маючи це на увазі, якщо я доручу завдання зберегти стан розмов у базовій технології (наприклад, cookie-файл або сесія http), я реалізую службу з виправленням стану, але якщо вся необхідна інформація (контекст) передається як параметри I ' м впровадження послуги без громадянства. Слід зазначити, що навіть якщо переданий параметр є "ідентифікатором" стану розмови (наприклад, квиток або sessionId), ми все одно працюємо в службі без громадянства,


Не впевнений, що передавання session identifierкожного запиту може вважатися без громадянства. На мій погляд, такий випадок вважатиметься державним. Однак, якщо ви завжди передаєте tokenкористувачеві, але не маєте жодного іншого стану, це означає, що воно є без громадянства. Але відчуває себе станом XD. Це так бентежить.
7hi4g0

4

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


1

Просто щоб додати внески інших .... Інший спосіб - поглянути на це з веб-сервера та точки зору паралелі ...

HTTP за своєю природою не має статусу причини: у випадку веб-сервера, наявність такого стану означає, що йому доведеться запам'ятати "стан" користувача для останнього з'єднання та / або підтримувати відкрите з'єднання із запитувачем. Це було б дуже дорого та "напружено" у програмі з тисячами одночасних з'єднань ...

Якщо в цьому випадку ви не маєте громадянства, це очевидно ефективне використання ресурсів ... тобто підтримка з’єднання в одному екземплярі запиту та відповіді ... Немає накладних витрат на підтримку з’єднань відкритими та / або пам’ятати що-небудь з останнього запиту ...


-3

Ми робимо Webapps повноцінними, замінюючи поведінку без стану HTTP за допомогою об'єктів сеансу. Коли ми використовуємо об'єкти сесії, стан передається, але ми все ще використовуємо лише HTTP.


-3

У мене були такі ж сумніви щодо дизайну класів без державного зв’язку і провів деякі дослідження. Щойно завершено, і мої висновки опубліковані в моєму блозі

  • Класи сутності мають бути державними
  • Класи помічників / робітників не повинні містити статус.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.