无国籍状态 VS 有国籍状态

我对有关编程中的无状态和有状态设计的具体信息的文章感兴趣。我感兴趣是因为我想更多地了解它,但我实在找不到任何关于它的好文章。我在网上读过几十篇关于这个主题的文章,或者是关于 web 服务器和会话的——也是关于有状态 VS 无状态的,但是我对编码中的属性的无状态 VS 有状态设计很感兴趣。例如: 我听说 BL-class 是无状态的,通过设计,实体类(或者至少我是这样称呼它们的-像 Person (id,name,。.))是有状态的,等等。

我认为知道这一点很重要,因为我相信如果我能理解它,我就能写出更好的代码(例如,心中的粒度)。

无论如何,非常简短,下面是我对有状态 vs 无状态的了解:

有状态(如 WinForms) : 存储数据以供进一步使用,但限制了应用程序的可伸缩性,因为它受到 CPU 或内存限制的限制

Stateless (Like ASP.NET - although ASP tries to be stateful with ViewStates): After actions are completed, the data gets transferred, and the instance gets handed back to the thread pool (Amorphous).

正如您所看到的,它非常模糊和有限的信息(并且非常专注于服务器交互) ,所以如果您能提供给我一些更有趣的信息,我将非常感激:)

140041 次浏览

我建议您从 StackOverflow 中的 有个问题入手,讨论无状态编程的优点。这更多地是在函数式编程的上下文中,但是您将要阅读的内容也适用于其他编程范例。

无状态编程与函数的数学概念有关,当使用相同的参数调用该函数时,总是返回相同的结果。这是功能编程范型的一个关键概念,我希望你们能够在这个领域找到许多相关的文章。

为了获得更多的理解,您可以研究的另一个领域是 RESTful Web 服务。与其他试图以某种方式保持状态的 Web 技术相比,这些技术被设计为“无状态”。(事实上,你所说的 ASP.NET 是无状态的并不正确—— ASP.NET 努力使用 ViewState 保持状态,并且肯定被描述为有状态的。另一方面,ASP.NET MVC 是一种无状态技术)。有许多地方讨论 RESTful Web 服务的“无状态”(如 这个 blog spot) ,但是您可以再次从 SO question开始。

有声有色应用程序是一种存储自开始运行以来发生了什么或发生了什么变化的信息的应用程序。任何关于它处于何种“模式”、处理了多少条记录或者其他什么的公开信息都会使它成为有状态的。

无状态的 应用程序不会暴露这些信息。它们每次对相同的请求、函数或方法调用给出相同的响应。HTTP 的原始形式是无状态的——如果你对一个特定的 URL 执行 GET 操作,理论上每次都会得到相同的响应。当然,例外的是当我们开始在顶部添加状态,例如 ASP.NET 网络应用程序:)但是如果你想到一个只有 HTML 文件和图片的静态网站,你就会明白我的意思。

形容词“有状态的”或“无状态的”只是指会话的状态,与为相同输入提供相同输出的函数概念无关。如果是这样的话,任何动态 Web 应用程序(后面有数据库)都将是有状态服务,这显然是错误的。 记住这一点,如果我委托任务在底层技术(如 cookie 或 http 会话)中保持会话状态,我就实现了一个有状态服务,但是如果所有必要的信息(上下文)都作为参数传递,我就实现了一个无状态服务。 应该注意的是,即使传递的参数是会话状态的“标识符”(例如票据或 sessionId) ,我们仍然在无状态服务下操作,因为会话是无状态的(票据在客户端和服务器之间不断传递) ,并且这两个端点可以说是“有状态的”。

在线从一个帐户转移到另一个帐户的钱是有状态的,因为接收帐户有关于发件人的信息。 Handing over cash from a person to another person, this transaction is statless, because after cash is recived the identity of the giver is not there with the cash.

通过使用会话对象覆盖 HTTP 无状态行为,我们使 Webapps 具有状态。当我们使用会话对象状态时,仍然只使用 HTTP。

无状态意味着没有对过去的记忆。每个事务的执行就像是第一次执行一样。

有状态的 意味着存在对过去的记忆。以前的事务被记住并可能影响当前的事务。

无国籍:

// 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;
}

参考: < a href = “ https://softwareengineering ering.stackexchange.com/questions/101337/what-the-different-between-statful-and-statless”> https://softwareengineering.stackexchange.com/questions/101337/whats-the-difference-between-stateful-and-stateless

我对有状态 v/s 无状态类设计也有同样的疑问,并做了一些研究。刚刚完成,我的发现已经发布在 my blog

  • 实体类需要是有状态的
  • Helper/worker 类不应该是有状态的。

只是添加其他人的贡献... ... 另一种方式是从 Web 服务器和并发的角度来看待它... ..。

HTTP 本质上是无状态的,这是有原因的... 对于 Web 服务器来说,有声有色意味着它必须记住用户最后一次连接的“状态”,并且/或者保持与请求者的开放连接。这将是非常昂贵和’压力’的应用程序与数千并发连接..。

在这种情况下,使用 无国籍显然有效地利用了资源... ... 也就是说,在请求和响应的单个实例中支持连接... ... 保持连接打开和/或记住上一个请求中的任何内容都没有开销... ..。