102

I'm interested in articles which have some concrete information about stateless and stateful design in programming. I'm interested because I want to learn more about it, but I really can't find any good articles about it. I've read dozens of articles on the web which vaguely discuss the subject, or they're talking about web servers and sessions - which are also 'bout stateful vs stateless, but I'm interested in stateless vs stateful design of attributes in coding. Example: I've heard that BL-classes are stateless by design, entity classes (or at least that's what I call them - like Person(id, name, ..)) are stateful, etc.

I think it's important to know because I believe if I can understand it, I can write better code (e.g. granularity in mind).

Anyways, really short, here's what I know 'bout stateful vs stateless:

Stateful (like WinForms): Stores the data for further use, but limits the scalability of an application, because it's limited by CPU or memory limits

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).

As you can see, it's pretty vague and limited information (and quite focussed on server interaction), so I'd be really grateful if you could provide me with some more tasty bits of information :)

Smart Manoj
  • 3,837
  • 2
  • 24
  • 45
Team-JoKi
  • 1,596
  • 3
  • 14
  • 23

8 Answers8

93

Stateless means there is no memory of the past. Every transaction is performed as if it were being done for the very first time.

Stateful means that there is memory of the past. Previous transactions are remembered and may affect the current transaction.

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

Refer from: https://softwareengineering.stackexchange.com/questions/101337/whats-the-difference-between-stateful-and-stateless

Esteban Verbel
  • 608
  • 1
  • 19
  • 36
Ankit
  • 4,399
  • 1
  • 18
  • 14
74

A stateful app is one that stores information about what has happened or changed since it started running. Any public info about what "mode" it is in, or how many records is has processed, or whatever, makes it stateful.

Stateless apps don't expose any of that information. They give the same response to the same request, function or method call, every time. HTTP is stateless in its raw form - if you do a GET to a particular URL, you get (theoretically) the same response every time. The exception of course is when we start adding statefulness on top, e.g. with ASP.NET web apps :) But if you think of a static website with only HTML files and images, you'll know what I mean.

Lucas Wilson-Richter
  • 2,064
  • 17
  • 22
59

I suggest that you start from a question in StackOverflow that discusses the advantages of stateless programming. This is more in the context of functional programming, but what you will read also applies in other programming paradigms.

Stateless programming is related to the mathematical notion of a function, which when called with the same arguments, always return the same results. This is a key concept of the functional programming paradigm and I expect that you will be able to find many relevant articles in that area.

Another area that you could research in order to gain more understanding is RESTful web services. These are by design "stateless", in contrast to other web technologies that try to somehow keep state. (In fact what you say that ASP.NET is stateless isn't correct - ASP.NET tries hard to keep state using ViewState and are definitely to be characterized as stateful. ASP.NET MVC on the other hand is a stateless technology). There are many places that discuss "statelessness" of RESTful web services (like this blog spot), but you could again start from an SO question.

Community
  • 1
  • 1
kgiannakakis
  • 96,871
  • 26
  • 155
  • 191
  • Alright, thanks for the info, I had a look at the link and I found some interesting information! Although I'm still open for more ;) – Team-JoKi Mar 25 '11 at 19:20
  • I've added another area that stateful and stateless is an important factor (RESTful web services). – kgiannakakis Mar 28 '11 at 06:37
  • Thanks for the info! I'd vote up your answer but I don't have enough rep yet >_> – Team-JoKi Mar 31 '11 at 07:17
  • many web apps are statefull beacause same sign up page gives differant results for user creditials...First time sign up will success...second time with same input signup will fail....because webapp has state of user somewhere stored...it may be database or differant storage – Nagappa L M Jan 15 '14 at 12:54
18

The adjective Stateful or Stateless refers only to the state of the conversation, it is not in connection with the concept of function which provides the same output for the same input. If so any dynamic web application (with a database behind it) would be a stateful service, which is obviously false. With this in mind if I entrust the task to keep conversational state in the underlying technology (such as a coockie or http session) I'm implementing a stateful service, but if all the necessary information (the context) are passed as parameters I'm implementing a stateless service. It should be noted that even if the passed parameter is an "identifier" of the conversational state (e.g. a ticket or a sessionId) we are still operating under a stateless service, because the conversation is stateless (the ticket is continually passed between client and server), and are the two endpoints to be, so to speak, "stateful".

Marco
  • 181
  • 1
  • 2
  • Not sure if passing a `session identifier` on every request can be considered stateless. In my point of view, such case would be considered stateful. If, however, you always pass a `token` for the user but hold no other state whatsoever, than it's stateless. But feels stateful XD. This is so confusing. – 7hi4g0 Oct 08 '14 at 15:36
5

Money transfered online form one account to another account is stateful, because the receving account has information about the sender. 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.

S Upendra rao
  • 51
  • 1
  • 1
1

Just to add on others' contributions....Another way is look at it from a web server and concurrency's point of view...

HTTP is stateless in nature for a reason...In the case of a web server, being stateful means that it would have to remember a user's 'state' for their last connection, and /or keep an open connection to a requester. That would be very expensive and 'stressful' in an application with thousands of concurrent connections...

Being stateless in this case has obvious efficient usage of resources...i.e support a connection in in a single instance of request and response...No overhead of keeping connections open and/or remember anything from the last request...

Ken.Fukizi
  • 177
  • 1
  • 9
-3

We make Webapps statefull by overriding HTTP stateless behaviour by using session objects.When we use session objets state is carried but we still use HTTP only.

Nagappa L M
  • 1,240
  • 3
  • 16
  • 28
-3

I had the same doubt about stateful v/s stateless class design and did some research. Just completed and my findings has been posted in my blog

  • Entity classes needs to be stateful
  • The helper / worker classes should not be stateful.
Joy George Kunjikkuru
  • 1,442
  • 13
  • 26