知识卡片
无状态服务器的真正含义
内容
“无状态”这个词在日常语境和分布式企业应用语境里含义并不相同。字面意义上,一个真正无状态的对象应该没有任何成员变量——但这样的对象极其罕见,说得直白一点,一个真正没有成员变量的对象其实是一种糟糕的设计,因为对象本来就该把状态和行为结合在一起。企业应用里说的”无状态服务器”完全是另一回事:它指的是在各次请求之间不保留状态的对象——这类对象完全可以拥有成员变量,只是每次调用无状态服务器对象上的方法时,这些成员变量此前的值都被视为未定义、不能依赖。比如一个根据ISBN返回书籍详情的Web服务对象,处理单次请求时完全可以在内部临时记住从数据库查到的书名、单价,用这些数据来决定该生成哪种风格的HTML页面——但一旦这次请求处理完,这些临时记住的信息就该被彻底丢弃,下一个ISBN请求进来时从零开始,不能有任何残留。可迁移启发:判断一个组件是不是”无状态”,不该看它有没有成员变量,而该看这些成员变量的值是否需要、或者是否被允许跨越请求边界继续存活——这才是无状态在工程实践里真正关心的问题。
参考来源
- 位置:《企业应用架构模式》第一部分"表述"之"第6章 会话状态"之"6.1 无状态的价值"(源文件:_epub-src/OEBPS/Text/000042.html)
- 结论依据:原文说明"一个真正无状态的对象是没有成员变量的……可以这样说,无状态对象是一种不良设计!然而,这不是人们在分布式企业应用中所指的无状态。分布式企业应用中的无状态服务器是指在各次请求之间不保存状态的对象。这样的对象也可以有成员变量,但当你调用无状态服务器上的方法时,这些成员变量的值是没有定义的",直接支撑本卡结论。
- 原始内容:分布式企业应用中的无状态服务器是指在各次请求之间不保存状态的对象。这样的对象也可以有成员变量,但当你调用无状态服务器上的方法时,这些成员变量的值是没有定义的。