107

プログラミングにおけるステートレスおよびステートフル設計に関する具体的な情報を含む記事に興味があります。詳しく知りたいので興味はありますが、良い記事がなかなか見つかりません。私はウェブ上で主題について漠然と議論している記事を何十も読んだことがあります。または、ウェブサーバーとセッションについて話している記事を読んだことがあります. . 例: BL クラスは設計上ステートレスであり、エンティティ クラス (または少なくとも私はそう呼んでいます - Person(id, name, ..) のように) はステートフルである、などと聞いたことがあります。

理解することができれば、より良いコードを書くことができると信じているので、知ることは重要だと思います (たとえば、粒度を念頭に置いて)。

とにかく、本当に短いですが、ステートフルとステートレスについて私が知っていることは次のとおりです。

ステートフル (WinForms など): 後で使用するためにデータを保存しますが、CPU またはメモリの制限によって制限されるため、アプリケーションのスケーラビリティが制限されます。

ステートレス (ASP.NET と同様 - ASP は ViewStates でステートフルになろうとしますが): アクションが完了すると、データが転送され、インスタンスがスレッド プールに戻されます (アモルファス)。

ご覧のとおり、かなり曖昧で限られた情報です (そして、サーバーとのやり取りにかなり焦点を当てています)。そのため、もう少し有益な情報を提供していただけると本当にありがたいです :)

4

8 に答える 8

96

ステートレスとは、過去の記憶がないことを意味します。すべてのトランザクションは、あたかも初めて行われたかのように実行されます。

ステートフルとは、過去の記憶があることを意味します。以前のトランザクションが記憶され、現在のトランザクションに影響を与える可能性があります。

ステートレス:

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

于 2014-08-30T12:35:19.263 に答える
75

ステートフルアプリとは、実行を開始してから何が起こったか、または何が変更されたかに関する情報を格納するアプリです。それがどの「モード」にあるか、または処理されたレコードの数などに関する公開情報は、それをステートフルにします。

ステートレスアプリはその情報を公開しません。それらは、毎回、同じ要求、関数、またはメソッド呼び出しに対して同じ応答を返します。HTTPは、生の形式ではステートレスです。特定のURLに対してGETを実行すると、(理論的には)毎回同じ応答が返されます。もちろん例外は、ASP.NET Webアプリなどでステートフルネスを追加し始めるときです:)しかし、HTMLファイルと画像のみを含む静的Webサイトについて考えると、私が何を意味するのかがわかります。

于 2011-03-29T06:41:42.577 に答える
61

ステートレスプログラミングの利点について説明しているStackOverflowの質問から始めることをお勧めします。これは関数型プログラミングのコンテキストに当てはまりますが、ここで読む内容は他のプログラミングパラダイムにも当てはまります。

ステートレスプログラミングは、関数の数学的概念に関連しており、同じ引数で呼び出されると、常に同じ結果を返します。これは関数型プログラミングパラダイムの重要な概念であり、その分野で多くの関連記事を見つけることができると思います。

理解を深めるために調査できるもう1つの分野は、RESTfulWebサービスです。これらは、何らかの形で状態を維持しようとする他のWebテクノロジーとは対照的に、設計上「ステートレス」です。(実際、ASP.NETがステートレスであると言うのは正しくありません。ASP.NETはViewStateを使用して状態を維持しようとし、ステートフルとして特徴付けられる必要があります。一方、ASP.NET MVCはステートレステクノロジです)。(このブログスポットのように)RESTful Webサービスの「ステートレス」について議論する場所はたくさんありますが、SOの質問から始めることもできます。

于 2011-03-22T09:34:24.563 に答える
18

ステートフルまたはステートレスという形容詞は、会話の状態のみを指し、同じ入力に対して同じ出力を提供する機能の概念とは関係ありません。もしそうなら、動的 Web アプリケーション (背後にデータベースがある) はステートフル サービスになりますが、これは明らかに誤りです。これを念頭に置いて、基礎となるテクノロジー (coockie や http セッションなど) で会話状態を維持するタスクを委ねると、ステートフル サービスを実装しますが、必要なすべての情報 (コンテキスト) がパラメーターとして渡される場合は、 m ステートレス サービスを実装します。渡されたパラメータが会話状態の「識別子」(チケットやセッション ID など)であっても、ステートレス サービスの下で動作していることに注意してください。

于 2012-06-29T10:22:40.720 に答える
5

ある口座から別の口座へのオンライン送金はステートフルです。これは、受取口座が送信者に関する情報を持っているためです。ある人から別の人に現金を渡す場合、この取引には統計がありません。なぜなら、現金を受け取った後は、その現金には贈り主の身元が分からないからです。

于 2013-11-26T11:45:53.797 に答える
-3

私は、ステートフル v/s ステートレス クラスの設計について同じ疑問を抱いており、いくつかの調査を行いました。ちょうど完了し、私の調査結果が私のブログに掲載されました

  • エンティティ クラスはステートフルである必要がある
  • ヘルパー/ワーカー クラスはステートフルであってはなりません。
于 2014-10-28T14:18:17.677 に答える