知识卡片

扩展/收缩模式:安全实现不兼容的数据库变更

普通读书笔记卡 · 1846.b

内容

想把一个name列拆成firstname和lastname这类破坏性的模式变更,直接改会立刻打断所有还在用旧结构的调用方。扩展/收缩模式的做法是先”扩展”——新旧两套结构并存一段过渡期,用触发器让写入任一边都能同步到另一边,读取双方各自安心访问熟悉的结构;等所有调用方都迁移到新结构后,再执行”收缩”——删除旧列。这给了组织内其他系统充分的适应时间,把一次不兼容变更拆成了两次都兼容的变更。

参考来源

- 位置:《演进式架构(原书第2版)》第6章《演进式数据》6.1.2节「扩展/收缩模式」(源文件:_epub-src/EPUB/xhtml/chapter10.xhtml) - 结论依据:原文用name列拆分为firstname/lastname的例子明确扩展/收缩模式的过渡态与触发器同步机制,直接支持卡片论点。 - 原始内容:"有种常用的重构模式可用于解开这种耦合:扩展/收缩(Expand/Contract)模式……考虑将一个姓名(name)列拆分为名字(firstname)和姓氏(lastname)……对于这个变更,开发人员有起始状态、扩展状态和最终状态"