无状态与有状态 - 我可以使用一些具体信息

我对那些在编程中有关于无状态和有状态设计的具体信息的文章很感兴趣。我很感兴趣,因为我想了解更多,但我真的找不到任何关于它的好文章。我已经阅读了几十篇关于网络的文章,这些文章模糊地讨论了这个主题,或者他们谈论的是网络服务器和会话 - 这也是'有状态与无国籍的关系,但我对无状态与编码属性的有状态设计感兴趣。示例:我听说BL-classes在设计上是无状态的,实体类(或者至少我称之为Person(id,name,..))是有状态的等等。 我认为重要的是要知道,因为我相信如果我能理解它,我可以编写更好的代码(例如,考虑粒度)。 无论如何,真的很短,这就是我所知道的'有状态对无国籍: 有状态(如WinForms):存储数据以供进一步使用,但限制了应用程序的可伸缩性,因为它受CPU或内存限制的限制 无状态(与ASP.NET一样 - 尽管ASP试图通过ViewStates建立状态): 操作完成后,数据将被传输,实例将被传回线程池(Amorphous)。 正如您所看到的,它是非常模糊和有限的信息(并且非常关注服务器交互),所以如果您能为我提供更多美味的信息,我将非常感激:)     
已邀请:
我建议你从StackOverflow中的一个问题开始,讨论无状态编程的优点。这更多地是在函数式编程的上下文中,但您将阅读的内容也适用于其他编程范例。 无状态编程与函数的数学概念有关,当使用相同的参数调用时,总是返回相同的结果。这是函数式编程范例的一个关键概念,我希望您能够在该领域找到许多相关文章。 为了获得更多理解,您可以研究的另一个领域是RESTful Web服务。这些设计是“无国籍的”,与其他尝试以某种方式保持状态的网络技术形成对比。 (事实上​​,你说ASP.NET是无状态的是不正确的 - ASP.NET使用ViewState努力保持状态,并且肯定被定性为有状态。另一方面,ASP.NET MVC是无状态技术)。有很多地方讨论RESTful Web服务的“无状态”(比如这个博客点),但你可以再次从一个SO问题开始。     
有状态应用程序是存储自开始运行以来发生或已更改的信息的应用程序。关于它所处的“模式”,或已经处理了多少记录的任何公开信息,或者其他什么,使其成为有状态的。 无状态应用程序不会公开任何这些信息。它们每次都对相同的请求,函数或方法调用给出相同的响应。 HTTP在其原始形式中是无状态的 - 如果您对特定URL执行GET,则每次(理论上)获得相同的响应。当然,例外情况是我们开始在顶部添加有状态,例如使用ASP.NET网络应用程序:)但如果你想到一个只有HTML文件和图像的静态网站,你就会明白我的意思。     
无国籍意味着没有过去的记忆。每次交易都像第一次完成一样进行。 有状态意味着有过去的记忆。以前的交易会被记住,并可能影响当前的交易。 无状态:
// 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;
}
请参阅:https://softwareengineering.stackexchange.com/questions/101337/whats-the-difference-between-stateful-and-stateless     
形容词有状态或无状态仅指对话的状态,它与为同一输入提供相同输出的函数概念无关。如果是这样的话,任何动态Web应用程序(后面都有一个数据库)将是一个有状态的服务,这显然是错误的。 考虑到这一点,如果我委托任务保持基础技术中的会话状态(例如coockie或http会话),我正在实现有状态服务,但如果所有必要信息(上下文)都作为参数传递我'实施无国籍服务。 应该注意的是,即使传递的参数是会话状态的“标识符”(例如票证或sessionId),我们仍然在无状态服务下运行,因为会话是无状态的(票证在客户端和客户端之间不断传递)服务器),并且是两个端点,可以说是“有状态的”。     
从一个帐户在线转移到另一个帐户的资金是有状态的,因为接收帐户具有关于发件人的信息。 将现金从一个人交给另一个人,这笔交易是无定金的,因为在现金被收回后,提供者的身份不存在现金。     
我们通过使用会话对象来覆盖HTTP无状态行为,从而使Webapps成为状态。当我们使用会话objets时,状态被执行但我们仍然只使用HTTP。     
我对有状态v / s无状态类设计有同样的疑问并做了一些研究。刚刚完成,我的发现已发布在我的博客中 实体类需要是有状态的 帮助者/工作者类不应该是有状态的。     
只是为了增加别人的贡献......另一种方式是从Web服务器和并发的角度来看待它...... HTTP本质上是无状态的......出于某种原因......在Web服务器的情况下,有状态意味着它必须记住用户的最后一次连接的“状态”,和/或保持与请求者的开放连接。在具有数千个并发连接的应用程序中,这将是非常昂贵和“压力”... 在这种情况下,无状态具有明显有效的资源使用...即在单个请求和响应实例中支持连接...没有保持连接打开和/或记住上次请求中的任何内容的开销...     

要回复问题请先登录注册