知识卡片

用关系数据库存储树形结构才是真实的组合模式

普通读书笔记卡 · 1857.a.4

内容

教科书式的[[组合模式的定义与三个角色]]示例在场景类里硬编码手动组装树,真实项目里树形 数据由业务人员维护在数据库的自引用表中(每行记录自身ID和父节点ID),程序只需从数据库 读取记录,用循环加递归组装成内存中的树对象。发散:读设计模式书要分清”教学示例”和”生产 实践”的差距——真实数据来源几乎总是数据库,组装逻辑要补上”从持久化数据还原对象图”这一层。

参考来源

- 位置:《设计模式之禅(第2版)》第21章《组合模式》(源文件:_epub-src/text/part0098.html) - 结论依据:原文明确"什么是真实的组合模式?就是你在实际项目中使用的组合模式……你要知道在项目中使用关系型数据库来存储这些信息……这些都是由相关的业务人员维护到数据库中的,通常这里是把数据存放到一张单独的表中……用了数据库后,数据和逻辑已经在表中定义好了,我们直接读取放到树上就可以了……这才是组合模式的真实引用"。 - 原始内容:在项目中使用关系型数据库来存储这些信息,你可以从数据库中直接提取出哪些人要分配到树枝,哪些人要分配到树叶,树枝与树枝、树叶的关系等……用了数据库后,数据和逻辑已经在表中定义好了,我们直接读取放到树上就可以了……这才是组合模式的真实引用,它依靠了关系数据库的非对象存储性能。