你将如何持久化一个实现状态设计模式的对象?

我目前正在制作一个快递服务网页 - 客户可以放弃订单 - 快递可以更改订单的状态(新的,接受的,交付中的,交付的,取消的)。我使用状态设计模式来描述这一点,因为它对我来说最有意义。

我想将所有订单保存在关系数据库中(我使用的是 H2 和 Hibernate/JPA) - 但我不知道如何在加载对象时恢复状态。

想到了两种方法:

  1. 为每个状态创建一个表,并将对象保存在与其状态对应的表中(我不知道如何(如果可能的话)实现这一点)。

  2. 给订单类一个与其所处状态相对应的属性 - 然后在再次加载对象时将对象的内部状态设置为等于相关状态。但这不会破坏状态设计模式的目的吗?目标不是最小化 if/else 语句和开关墙吗?

我应该怎么办?有没有更好的方法来解决这个问题?


红糖糍粑
浏览 163回答 3
3回答

幕布斯6054654

这在很大程度上取决于您的用例。您是否计划拥有数以百万计的行?那么每个州都有一张桌子实际上是有道理的。这称为分区,通常,您的应用程序不会知道您有一组表。但是你的数据库会。我认为情况并非如此。第二个选择是声音,如果它是一个玩具项目。状态设计模式的目标不是减少 if/else 语句的数量。根据我的经验,它通常会产生更多的 if/else 语句。目标是封装状态转换。也就是说,在代码周围使用 if/else,很容易将您的订单从 Created 状态移动到 Completed 状态,而实际上它没有被处理。状态设计模式有助于解决这个问题。但实际上还有第三种选择,通常用于现实生活中的系统。有 OrderStates 表,它将保存订单所在的所有状态。每次订单在状态之间移动时创建一行。这将使您能够真正了解系统中发生的情况。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java