to SpeedVan
事务 确实是站在可变模式这边,我们可以用锁 or 拷贝副本等手段来达到同样的目的。
不变模式,这个更需要替换吧,这是用new来替代old,一次性动作,是一个状态切到另一个状态,这定然会产生大量的old 对象从而引起gc的动作。
demo就不用找了吧,banq以前的帖子里就有,直接new替代old。
关于“同取同加” 说白了就是 并发的问题
A与B同时以库存那个50为condition来进行后续operation,结果都pass 都各自执行operation(这个operation的动作就是改库存的50)
结果那不就乱了么,都pass了 都能改啊
当然了,A与B库存的问题还是有解的。 如同乐观锁 悲观锁
不变模式 --- 没有中间过程, 从A状态 直接变为 B状态 这个认同
就拿刷卡为例,account只有$50了,很不幸卡被人秘密的copy了
你和那个盗用的人 同时刷那$50
按照 不变模式 都check 那 amout
method(简版): 刷卡(account_number,消费){......}
如果同时involved这个method的话,是不是意味着 你 和 盗用者都能刷呢
我想你不会允许这种情况发生吧,至少会在business所要求的安全等级来适当的“锁”吧
关于“入库50中途出错”那段 同意你的说法, 不过单纯的逻辑运算定然会涉及到一系列的object的copy,为什么? 因为要保证不变性。
我的天,一系列的copy啊,多少object啊,除非逻辑运算中用到的对象都是无状态的(这到不用copy了,这种情况不太多吧)。
毕竟system是复杂的,是一系列的domain之间的组合关联从而构成这个system啊。
再说下不变模式,你直接替换不要紧,至少要确认替换时前一时刻的状态是没问题的。
因为替换是有依据的,是前面的老状态。
千万别出现 此时非彼时
下班脑子乱, 一通胡言乱语 有不敬之处 望谅解
希望 speedvan 能就 刷卡 再深入点 多多提示