知识卡片

重构建议跨层冲突的三条消解策略

普通读书笔记卡

内容

由于架构持续演进原则子指标的度量元素来源于组件层和代码层等不同层次,重构操作建议也就面向不同层次,这带来一个现实问题:多个子指标可能给出相互冲突的重构建议。冲突分两类:同层的重构建议之间存在矛盾(例如两个组件层面的建议都要修改同一组件,但方向相反);下层的重构建议会影响上层的结构(例如对代码层文件的修改,可能连带改变组件层的依赖关系)。针对这两类冲突,书中给出三条消解策略。第一条:当同层的重构建议出现冲突时,优先满足未达成程度高的子指标的重构需求——合理性在于,架构重构的整体目标是尽量达成更多子指标,在各子指标权重相同的前提下,优先处理”差得最远”的那个能更快改善整体达成情况;如果仍需兼顾未达成程度较低的子指标,就重新选择对度量值影响程度更低的元素作为重构对象,绕开冲突点。第二条:低层次的重构操作要在同一个高层次对象内部进行,以保证不出现跨层操作冲突——合理性在于,低层次结构本就包含在高层次结构中,如果一次低层操作涉及多个高层对象,就可能牵连改变上层结构,进而导致上层原本计划的重构操作无法进行;把低层操作限制在单一高层对象内部,就能保证下层改动不会波及上层。第三条:当同时需要对不同层次进行重构操作时,先进行较低一层的重构操作——合理性在于,低层次对象是高层次对象的组成元素,如果先做高层操作,可能改变低层对象的结构或所属位置,导致原本计划好的低层操作无法执行;先做低层操作,就能保证之后的上层变动不会打断低层的操作计划。这三条策略共同体现的原则是:处理跨层冲突时,永远优先保证”更底层、更局部”的操作先完成或被限定在安全边界内,因为底层结构一旦变动会牵连上层,而上层的变动通常不会反向牵连底层内部的操作顺序。

参考来源

- 位置:《软件架构理论与实践》第16章《软件架构重构》"16.3.5 实施重构操作"节(源文件:_epub-src/OEBPS/text00130.html) - 结论依据:原文给出三条冲突消解策略及各自的合理性分析("当同层的重构建议出现冲突时,优先满足未达成程度高的子指标的重构需求……低层次的重构操作在同一个高层次对象中进行,以保证不出现跨层操作冲突……当同时需要对不同的层次进行重构操作时,先进行较低一层的重构操作"),直接支撑本卡片结论。 - 原始内容:低层次结构是包含在高层次结构中的,如果低层次的操作涉及多个高层次对象,可能会影响上层的结构,上层结构的变化可能会引起上层重构对象的变动,进而导致上层的重构操作无法进行。