Không trạng thái so với Trạng thái - Tôi có thể sử dụng một số thông tin cụ thể


93

Tôi quan tâm đến các bài báo có một số thông tin cụ thể về thiết kế trạng thái và không trạng thái trong lập trình. Tôi quan tâm vì tôi muốn tìm hiểu thêm về nó, nhưng tôi thực sự không thể tìm thấy bất kỳ bài báo nào hay về nó. Tôi đã đọc hàng tá bài báo trên web thảo luận mơ hồ về chủ đề hoặc họ đang nói về máy chủ web và phiên - cũng là 'cơn trạng thái so với không trạng thái, nhưng tôi quan tâm đến thiết kế không trạng thái so với trạng thái của các thuộc tính trong mã hóa . Ví dụ: Tôi đã nghe nói rằng các lớp BL là không trạng thái theo thiết kế, các lớp thực thể (hoặc ít nhất đó là những gì tôi gọi chúng - như Person (id, name, ..)) là trạng thái, v.v.

Tôi nghĩ rằng điều quan trọng là phải biết, bởi vì tôi tin rằng nếu tôi có thể hiểu nó, tôi có thể viết mã tốt hơn (ví dụ như tính chi tiết trong tâm trí).

Dù sao, thực sự ngắn gọn, đây là những gì tôi biết 'cơn trạng thái và không trạng thái:

Stateful (như WinForms): Lưu trữ dữ liệu để sử dụng thêm, nhưng giới hạn khả năng mở rộng của một ứng dụng, vì nó bị giới hạn bởi giới hạn CPU hoặc bộ nhớ

Không trạng thái (Giống như ASP.NET - mặc dù ASP cố gắng trở thành trạng thái với ViewStates): Sau khi các hành động được hoàn thành, dữ liệu sẽ được truyền và cá thể được đưa trở lại nhóm luồng (Vô định hình).

Như bạn có thể thấy, đó là thông tin khá mơ hồ và hạn chế (và khá tập trung vào tương tác với máy chủ), vì vậy tôi thực sự biết ơn nếu bạn có thể cung cấp cho tôi một số thông tin thú vị hơn :)

Câu trả lời:


58

Tôi khuyên bạn nên bắt đầu từ một câu hỏi trong StackOverflow thảo luận về lợi thế của lập trình không trạng thái. Điều này nhiều hơn trong ngữ cảnh của lập trình chức năng, nhưng những gì bạn sẽ đọc cũng áp dụng trong các mô hình lập trình khác.

Lập trình không trạng thái liên quan đến khái niệm toán học về một hàm, khi được gọi với các đối số giống nhau, luôn trả về các kết quả giống nhau. Đây là một khái niệm chính của mô hình lập trình chức năng và tôi hy vọng rằng bạn sẽ có thể tìm thấy nhiều bài báo có liên quan trong lĩnh vực đó.

Một lĩnh vực khác mà bạn có thể nghiên cứu để hiểu thêm là các dịch vụ web RESTful. Đây là do thiết kế "không trạng thái", trái ngược với các công nghệ web khác cố gắng giữ trạng thái bằng cách nào đó. (Trên thực tế, những gì bạn nói rằng ASP.NET là không trạng thái là không chính xác - ASP.NET cố gắng rất nhiều để giữ trạng thái bằng ViewState và chắc chắn được đặc trưng là trạng thái. Mặt khác, ASP.NET MVC là một công nghệ không trạng thái). Có nhiều nơi thảo luận về "tính vô trạng" của các dịch vụ web RESTful (như điểm blog này ), nhưng bạn có thể bắt đầu lại từ một câu hỏi SO .


Được rồi, cảm ơn vì thông tin, tôi đã xem liên kết và tôi tìm thấy một số thông tin thú vị! Mặc dù tôi vẫn đang mở để biết thêm;)
Team-JoKi

Tôi đã thêm một lĩnh vực khác mà trạng thái và không trạng thái là một yếu tố quan trọng (các dịch vụ web RESTful).
kgiannakakis

Cảm ơn bạn về thông tin! Tôi muốn bỏ phiếu lên câu trả lời của bạn nhưng tôi không có đủ diện chưa> _>
Team-Joki

nhiều ứng dụng web ở trạng thái hoàn toàn bởi vì cùng một trang đăng ký cho kết quả khác nhau về tín nhiệm của người dùng ... Đăng ký lần đầu tiên sẽ thành công ... đăng ký lần thứ hai với cùng một đầu vào sẽ không thành công .... vì ứng dụng web có trạng thái của người dùng ở đâu đó được lưu trữ .. .it có thể sở dữ liệu hoặc lưu trữ differant
cảm giác tốt và lập trình

83

Khôngquốc tịch nghĩa là không có ký ức về quá khứ. Mọi giao dịch được thực hiện như thể nó đang được thực hiện lần đầu tiên.

Trạng thái có nghĩa là có ký ức về quá khứ. Các giao dịch trước đây được ghi nhớ và có thể ảnh hưởng đến giao dịch hiện tại.

Không trạng thái:

// The state is derived by what is passed into the function

function int addOne(int number)
{
    return number + 1;
}

Tuyên bố:

// The state is maintained by the function

private int _number = 0; //initially zero

function int addOne()
{
   _number++;
   return _number;
}

Tham khảo từ: /software/101337/whats-the-difference-between-stateful-and-stateless


73

Một stateful ứng dụng là một trong đó lưu trữ thông tin về những gì đã xảy ra hoặc thay đổi kể từ khi nó bắt đầu chạy. Bất kỳ thông tin công khai nào về "chế độ" nó đang ở, hoặc số lượng hồ sơ đã được xử lý, hoặc bất kỳ điều gì, đều làm cho nó trở nên rõ ràng.

Ứng dụng không trạng thái không tiết lộ bất kỳ thông tin nào trong số đó. Chúng đưa ra cùng một phản hồi cho cùng một lời gọi yêu cầu, hàm hoặc phương thức, mọi lúc. HTTP là không trạng thái ở dạng thô - nếu bạn thực hiện GET đến một URL cụ thể, bạn nhận được (về mặt lý thuyết) cùng một phản hồi mọi lúc. Tất nhiên, ngoại lệ là khi chúng tôi bắt đầu thêm trạng thái lên trên, ví dụ như với các ứng dụng web ASP.NET :) Nhưng nếu bạn nghĩ về một trang web tĩnh chỉ có các tệp HTML và hình ảnh, bạn sẽ hiểu ý tôi.


18

Tính từ Trạng thái hoặc Không trạng thái chỉ đề cập đến trạng thái của cuộc hội thoại, nó không liên quan đến khái niệm chức năng cung cấp cùng một đầu ra cho cùng một đầu vào. Nếu vậy, bất kỳ ứng dụng web động nào (với cơ sở dữ liệu đằng sau nó) sẽ là một dịch vụ trạng thái, điều này rõ ràng là sai. Lưu ý điều này nếu tôi giao nhiệm vụ giữ trạng thái hội thoại trong công nghệ cơ bản (chẳng hạn như phiên coockie hoặc http), tôi đang triển khai một dịch vụ trạng thái, nhưng nếu tất cả thông tin cần thiết (ngữ cảnh) được chuyển dưới dạng tham số thì tôi ' m đang triển khai một dịch vụ không quốc tịch. Cần lưu ý rằng ngay cả khi tham số được truyền là "định danh" của trạng thái hội thoại (ví dụ: vé hoặc sessionId), chúng tôi vẫn đang hoạt động theo một dịch vụ không trạng thái,


Không chắc liệu việc chuyển một session identifiertrên mọi yêu cầu có thể được coi là không trạng thái hay không. Theo quan điểm của tôi, trường hợp như vậy sẽ được coi là đúng đắn. Tuy nhiên, nếu bạn luôn chuyển một tokencho người dùng nhưng không giữ trạng thái nào khác ngoài trạng thái không trạng thái. Nhưng cảm thấy trạng thái XD. Thật là khó hiểu.
7hi4g0

4

Tiền được chuyển qua hình thức trực tuyến từ tài khoản này sang tài khoản khác là trạng thái, vì tài khoản thu có thông tin về người gửi. Giao tiền mặt từ người này sang người khác, giao dịch này là vô nguyên tắc, vì sau khi tiền mặt được nhận, danh tính của người cho không có ở đó cùng với tiền mặt.


1

Chỉ để thêm vào những đóng góp của người khác .... Một cách khác là xem xét nó từ một máy chủ web và quan điểm của đồng thời ...

HTTP có bản chất không trạng thái vì một lý do ... Trong trường hợp của máy chủ web, trạng thái có nghĩa là nó sẽ phải ghi nhớ 'trạng thái' của người dùng cho kết nối cuối cùng của họ và / hoặc giữ một kết nối mở với người yêu cầu. Điều đó sẽ rất tốn kém và 'căng thẳng' trong một ứng dụng có hàng nghìn kết nối đồng thời ...

Không trạng thái trong trường hợp này có cách sử dụng tài nguyên hiệu quả rõ ràng ... tức là hỗ trợ kết nối trong một trường hợp yêu cầu và phản hồi duy nhất ... Không có chi phí duy trì kết nối mở và / hoặc nhớ bất kỳ điều gì từ yêu cầu cuối cùng ...


-3

Chúng tôi làm cho các ứng dụng Web ở trạng thái đầy đủ bằng cách ghi đè hành vi không trạng thái HTTP bằng cách sử dụng các đối tượng phiên. Khi chúng tôi sử dụng trạng thái phản đối phiên được thực hiện nhưng chúng tôi vẫn chỉ sử dụng HTTP.


-3

Tôi đã có cùng một nghi ngờ về thiết kế lớp không trạng thái v / s trạng thái và đã thực hiện một số nghiên cứu. Vừa hoàn thành và phát hiện của tôi đã được đăng trên blog của tôi

  • Các lớp thực thể cần phải trạng thái
  • Các lớp người trợ giúp / công nhân không nên trạng thái.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.