知识卡片

部分复用一个模块必然撞上复制粘贴与整体引用的两难

普通读书笔记卡 · 1815.b

内容

当一个模块只被部分复用时会撞上两难:整体引用这个模块会背上并不需要的额外包袱,日后模块更新时还容易和已复用部分产生命名冲突;只复制粘贴需要的那部分又会导致原模块修复缺陷时,被复制出去的版本永远得不到同步更新。这两个方向被形象地称作神话中海峡两岸的两个怪物——想两头都不撞上,往往意味着模块粒度从一开始就切得不对,而不是复用方式本身有问题。

参考来源

- 位置:《架构之美》第13章《软件架构:面向对象与面向函数》13.3.2节《函数式方法的评价》(源文件:程序之美系列套装(6册)团队之美、项目管理之美、架构之美、数据之美、测试之美、安全之美/_epub-src/OEBPS/Text/part0258.xhtml) - 结论依据:原文明确"如果其他程序只需要一部分操作和合成方式,那么就必将面临模块化技术中经常遇到的两难选择:Charybdis(复制-粘贴……当原始内容发生改变时……是无法做相应更新的)Scylla(引用整个模块……最终担负起不必要的包袱)"。 - 原始内容:Charybdis:复制-粘贴相关的部分,但这样做也有一些风险,当原始内容发生改变时(可能是修复一个缺陷),派生模块是无法做相应更新的。Scylla:引用整个模块,使用模块中一部分可用功能,最终担负起不必要的包袱。