50、客户端/服务器应用程序设计:无状态与有状态架构解析

客户端/服务器应用程序设计:无状态与有状态架构解析

1. 无状态应用程序分析

在开发应用程序时,我们实现了支持对话的代码,从用户的角度来看,对话是一系列工作单元。用户期望在工作流中执行一系列步骤,每个步骤都是临时的,直到最后一步结束对话。最后一步通常是客户端向服务器发出的最终请求,标志着对话的结束。这看似与事务类似,但为了完成特定的对话,可能需要在服务器上执行多个系统事务。

那么,如何在多个请求和系统事务之间实现原子性呢?用户的对话可能具有任意的复杂性和持续时间。在对话流程中,可能会有多个客户端请求加载分离的数据。由于我们可以控制客户端上的分离实例,因此只要在对话工作流的最终请求之前,不在服务器上合并、持久化或删除任何实体实例,就可以轻松实现对话的原子性。我们需要以某种方式对修改进行排队,并在用户思考时间内管理分离数据。在确定要“提交”对话之前,不要从客户端调用任何会在服务器上进行永久更改的服务操作。

需要注意的一个问题是分离引用的相等性。例如,如果我们加载了多个 Item 实例并将它们放入 Set 中,或者用作 Map 的键,由于我们是在对象标识的保证范围(即持久化上下文)之外比较实例,因此必须重写 Item 实体类的 equals() hashCode() 方法。在只有一个分离的 Item 实例列表的简单对话中,这并不是必需的,因为我们从未在 Set 中比较它们,也未将它们用作 HashMap 的键或显式测

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值