Tea*_*oKi 87 terminology stateful stateless
我对那些在编程中有关于无状态和有状态设计的具体信息的文章很感兴趣.我很感兴趣,因为我想了解更多,但我真的找不到任何关于它的好文章.我已经阅读了几十篇关于网络的文章,这些文章模糊地讨论了这个主题,或者他们谈论的是网络服务器和会话 - 这也是'有状态与无国籍的关系,但我对无状态与编码属性的有状态设计感兴趣.示例:我听说BL-classes在设计上是无状态的,实体类(或者至少我称之为Person(id,name,..))是有状态的等等.
我认为重要的是要知道,因为我相信如果我能理解它,我可以编写更好的代码(例如粒度).
无论如何,真的很短,这就是我所知道的'有状态对无国籍:
有状态(如WinForms):存储数据以供进一步使用,但限制了应用程序的可伸缩性,因为它受CPU或内存限制的限制
无状态(与ASP.NET一样 - 尽管ASP尝试使用ViewStates保持状态):操作完成后,数据将被传输,实例将被传回线程池(Amorphous).
正如您所看到的,它是非常模糊和有限的信息(并且非常关注服务器交互),所以如果您能为我提供更多美味的信息,我将非常感激:)
小智 76
无国籍意味着没有过去的记忆.每次交易都像第一次完成一样进行.
有状态意味着有过去的记忆.以前的交易会被记住,并可能影响当前的交易.
无状态:
// The state is derived by what is passed into the function
function int addOne(int number)
{
return number + 1;
}
Run Code Online (Sandbox Code Playgroud)
有状态:
// The state is maintained by the function
private int _number = 0; //initially zero
function int addOne()
{
_number++;
return _number;
}
Run Code Online (Sandbox Code Playgroud)
请参阅: https ://softwareengineering.stackexchange.com/questions/101337/whats-the-difference-between-stateful-and-stateless
Luc*_*ter 72
有状态应用程序是存储自开始运行以来发生或已更改的信息的应用程序.关于它所处的"模式",或已经处理了多少记录的任何公开信息,或者其他什么,使其成为有状态的.
无状态应用程序不会公开任何此类信息.它们每次都对相同的请求,函数或方法调用给出相同的响应.HTTP在其原始形式中是无状态的 - 如果您对特定URL执行GET,则每次(理论上)获得相同的响应.当然例外是我们开始添加有状态,例如使用ASP.NET网络应用程序:)但是如果你想到一个只有HTML文件和图像的静态网站,你就会明白我的意思.
kgi*_*kis 52
我建议你从StackOverflow中的一个问题开始,讨论无状态编程的优点.这更多地是在函数式编程的上下文中,但您将阅读的内容也适用于其他编程范例.
无状态编程与函数的数学概念有关,当使用相同的参数调用时,总是返回相同的结果.这是函数式编程范式的一个关键概念,我希望您能够在该领域找到许多相关文章.
为了获得更多理解,您可以研究的另一个领域是RESTful Web服务.这些设计是"无国籍的",与其他尝试以某种方式保持状态的网络技术形成对比.(事实上,你说ASP.NET是无状态的是不正确的 - ASP.NET使用ViewState努力保持状态,并且肯定被定性为有状态.另一方面,ASP.NET MVC是无状态技术).有很多地方讨论RESTful Web服务的"无状态"(比如这个博客点),但你可以再次从一个SO 问题开始.
小智 17
形容词有状态或无状态仅指对话的状态,它与为同一输入提供相同输出的函数概念无关.如果是这样的话,任何动态Web应用程序(后面都有一个数据库)将是一个有状态的服务,这显然是错误的.考虑到这一点,如果我委托任务保持基础技术中的会话状态(例如coockie或http会话),我正在实现有状态服务,但如果所有必要信息(上下文)都作为参数传递我'实施无国籍服务.应该注意的是,即使传递的参数是会话状态的"标识符"(例如票证或sessionId),我们仍然在无状态服务下运行,因为会话是无状态的(票证在客户端和客户端之间不断传递)服务器),并且是两个端点,可以说是"有状态的".