无状态与有状态 – 我可以使用一些具体的信息
我感兴趣的是那些在编程方面有关于无状态和有状态devise的具体信息的文章。 我感兴趣,因为我想了解更多,但我真的找不到任何好的文章。 我已经阅读了几十篇关于Web的文章,这些文章模糊地讨论了这个主题,或者他们正在讨论Web服务器和会话 – 这也是“有状态的vs无状态的,但是我感兴趣的是编码中的状态devise和状态devise。 例如:我听说BL-class是无状态的,实体类(或至less我称之为Person类(id,name,..))是有状态的等等。
我认为重要的是要知道,因为我相信如果我能理解它,我可以写出更好的代码(例如粒度)。
无论如何,真的很短,这就是我所知道的有状态vs无状态:
有状态(如WinForms):存储数据以供进一步使用,但限制了应用程序的可伸缩性,因为它受CPU或内存限制
无状态的(像ASP.NET一样 – 尽pipeASP试图使用ViewStates来实现状态化):在完成操作之后,数据被传输,实例被移交给线程池(Amorphous)。
正如你所看到的,这是非常模糊和有限的信息(并且非常专注于服务器交互),所以我会很感激,如果你能给我提供一些更美味的信息:)
我build议你从StackOverflow中的一个问题开始,讨论无状态编程的优点。 这更多的是在函数式编程的背景下,但是你会阅读的内容也适用于其他的编程范例。
无状态编程与函数的math概念有关,当用相同的参数调用时,总是返回相同的结果。 这是函数式编程范式的一个关键概念,我希望你能在这个领域find许多相关的文章。
另一个可以研究以获得更多理解的领域是RESTful Web服务。 这些devise在devise上是“无状态的”,而其他的networking技术则试图以某种方式保持状态。 (事实上,你说ASP.NET是无状态的是不正确的 – ASP.NET尝试使用ViewState保持状态,肯定被定性为有状态的。另一方面,ASP.NET MVC是一种无状态技术。 有很多地方讨论RESTful Web服务的“无状态”(比如这个博客),但是你可以从一个SO 问题开始。
有状态的应用程序是一个存储有关自运行以来发生或更改的信息的应用程序。 任何公共信息关于它是什么“模式”,或有多lesslogging已经处理,或其他什么,使它有状态。
无状态应用程序不公开任何信息。 他们每次都对相同的请求,函数或方法调用给予相同的响应。 HTTP在其原始forms中是无状态的 – 如果你对特定的URL进行了GET,每次都会得到(理论上)相同的响应。 当然,例外情况是,我们开始在顶部添加有状态,例如ASP.NET Web应用程序:)但是,如果您只想到一个仅包含HTML文件和图像的静态网站,您就会明白我的意思。
无状态意味着没有过去的记忆。 每一笔交易的执行都像是第一次完成。
有状态意味着有过去的记忆。 以前的交易被记住,可能会影响当前的交易。
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
形容词“有状态”或“无状态”只是指对话的状态,它与为相同input提供相同输出的function概念不相关。 如果是这样的话,任何dynamic的Web应用程序(后面都有一个数据库)将是一个有状态的服务,这显然是错误的。 考虑到这一点,如果我委托任务保持基础技术(如coockie或http会话)的对话状态,我正在实现一个有状态的服务,但如果所有必要的信息(上下文)作为parameter passing,实施无国籍的服务。 应该注意的是,即使传递的参数是会话状态的“标识符”(例如票据或sessionId),我们仍然在无状态的服务中运行,因为对话是无状态的(票证不断地在客户端和服务器),是两个端点,可以说是“有状态的”。
在线转账从一个账户到另一个账户是有状态的,因为收款账户具有关于发送者的信息。 将现金从一个人转交给另一个人,这笔交易是无价值的,因为现金被收回后,提供者的身份不在现金中。
我们通过使用会话对象重写HTTP无状态行为来使Webapps处于有状态。当我们使用会话objets时,状态被携带,但是我们仍然只使用HTTP。
我对有状态的无状态类devise也有同样的怀疑,并做了一些研究。 刚刚完成,我的发现已经发布在我的博客
- 实体类需要是有状态的
- 助手/工人类不应该是有状态的。