HackerTube English?
主题阅读

用户今天续费了,还能解释昨天那封催缴邮件吗?

一次判断要能重现,除了规则本身,还需要当时交给它的那份数据。

客服问昨天为什么发了催缴邮件。你打开用户资料,看到「已续费」。这份资料能回答现在能否使用服务,要还原昨天的决定,还差一条带时间的信息。

给事实带上时间

Rich Hickey 在《The Value of Values》里区分了一个事实和后来的变化。套在这个例子上,「昨天到期」和「今天续费」可以同时成立。如果每次只覆盖当前状态,过几天就很难知道那封邮件寄出时,系统掌握了什么。

you can't update a fact is because you can't change the past
Rich Hickey · The Value of Values · 英文字幕
回看原片 22:20–22:25 →

两个版本可以共用大部分内容

另一场演讲回答实现上的疑问:保留旧版,是不是每次都得复制整份资料?持久化数据结构可以让两个版本共享没有变化的部分。旧版继续指向原来的值,新版指向修改后的值,两次读取各有明确的对象。

the next version of the value shares a lot of structure with the prior version
Rich Hickey · Are We There Yet? · 英文字幕
回看原片 40:03–40:20 →

这里还有一个需要自己做的决定:该保存哪些版本、怎样把版本对应到业务时间。结构共享能降低保留版本的代价,应用仍要记录那封邮件用了哪份资料。这样,把旧资料和当时日期交给判断规则,才有机会复现昨天的结果。