Kickstarter:先让承诺达到启动门槛,再收取项目资金
Kickstarter 的全有或全无筹资,把目标金额与截止时间绑定。它让支持者的承诺附带一个共同条件:达到最低目标才收费,但达标仍不等于保证交付。
先尝试拆解问题、设计和实现,再展开思路,检查状态、边界与取舍,并设计验证用例。思路提供分析路径,不给出完整实现。
01
代码思考
在截止边界确定稳定结果
为一个本地活动筹资模拟器实现承诺与结算模块。目标为 300 元,截止时刻用整数 100 表示。用户可提交或替换自己的承诺金额、取消自己的承诺,并查询当前状态;每次调用都传入当前时刻,时间只会前进或保持不变。金额为正整数,不接支付系统。
- 时刻小于 100 时可以修改承诺。同一个人的新金额替换旧金额;取消不存在的承诺不改变状态。任何调用在时刻大于等于 100 时,先按截止前最后的承诺确定结果:合计至少 300 元为达标,否则为未达标。此后结果和金额固定,修改请求一律拒绝。
- 时刻 80,A 承诺 100;90,B 承诺 150;95,A 改为 150。到 100 查询应得到达标、总额 300。101 取消 A 应拒绝,再查询仍为 300。另开一场只有 A 承诺 100 的活动,在时刻 100 尝试新增 B 的 200 元应拒绝,结果为未达标、总额 100。
- 交付可运行模块和上述过程,说明什么保证了所有入口对截止边界的判断一致。无需定时器、真实时钟或支付处理。
查看思路
区分“仍可修改的承诺集合”和“已经确定的结算结果”。思考第一次到达截止点的调用可能是查询,也可能是新增或取消;把截止判断放在所有入口共同遵守的位置,再用恰好等于 100 的新增请求检查边界。