[答疑]订单、预约单的流水号是冗余属性吗

DDD领域驱动设计批评文集

做强化自测题获得“软件方法建模师”称号

《软件方法》各章合集


陈磊 2024-6-12 20:40

老师好!我学习了软件方法的类图内容,也已经认真做题了,现有一个问题想请老师解惑。

像订单、预约单这样的单据生成的时候,会生成一个流水号作为标识,有时还会以二维码、条形码的形式给用户。这个流水号算冗余属性吗?

UMLChina潘加宇

(1)首先,要区分“标识”和“流水号”,参见《软件方法》第8章以下内容:

图片

图片

(2)如果就是要用这个“流水号”作为标识,那不是冗余属性。

(深究起来,所有的“对象标识”都是冗余的,都是在信息不足的情况下用于区分对象的“偷懒”手段,但这是另一个级别的问题了。)

(3)如果“流水号”不是标识,按照书中的方法来判断就行:它是不是可以由其他属性计算得到。

我用餐饮领域举例,列了几种情况供参考,不一定正确和全面:

如果“订单”的“流水号”“TS202406140013”的最开始生成时的规则是根据“订单”的“订单类型(TS-堂食)”、 “订单”的“下单日期(2024-06-14)”以及统计当天的堂食订单的先后顺序(第13个下的单)得到的。

(3.1)如果在对象的生命周期中,这样的计算都可以完成,而且“流水号”的值一直遵循生成的规则,那么“流水号”是冗余的。

例如,系统一直维护“订单类型”、“下单日期”的信息,如果把某个订单的类型从堂食改成了外带,那么“流水号”也会相应改成“WD***********”。

(3.2)如果把某个订单的类型从堂食改成了外带,但“流水号”不变,此时“流水号”已经无法通过之前的规则计算得到,它不是冗余的。(高概率)

(4)如果系统没有维护“订单类型”、“下单日期”等信息,只维护了一个“流水号”,然后还有逻辑去解析这个“流水号”得到“订单类型”、“下单日期”等信息,那么“流水号”已经不是流水号了,是融合了多个属性的错误结构。

(5)如果“流水号”的生成使用了随机数,那么在对象的生命周期中,“流水号”不能从其他属性还原,那就不是冗余的。

注意,以上都是从逻辑的角度来讨论,不涉及性能问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值