BranchByAbstraction
“抽象模拟分支”是一种允许您在定期发布系统的同时,仍可逐步对软件系统进行大规模更改的技术。
以下是使用“抽象模拟分支”技术逐步替换依赖项的过程:
软件系统的各个部分都依赖于我们希望替换的模块,库,框架或类(为便于描述后面用“供应商”指代)。
创建一个抽象层,供应商继承(依赖)抽象层,选取一个依赖供应商的客户代码,调整该客户代码以通过抽象层调用供应商。
逐渐将所有客户代码移到使用抽象层,直到与供应商的所有交互都由抽象层完成。在此过程中,我们可以借此机会通过此抽象层来提高单元测试范围。
我们建立了一个新的供应商,该供应商使用相同的抽象层来实现一部分客户代码所需的功能。准备就绪后,我们将切换客户代码的该部分以使用新的供应商。
我们逐步换掉有缺陷的供应商,直到所有客户代码都使用新的供应商。一旦不需要有缺陷的供应商,我们可以将其删除。一旦不再需要抽象层进行迁移,我们也可以选择删除抽象层。
我上面的描述描述了一个常见的情况,但是可能会发生很多变化。有时,您不能只交换某些客户的供应商,而是必须一次完成所有工作。有时您可以将供应商的功能分解为不同的子组件,并一次执行一个子组件的整个过程。
尽管有这些变化,但是有一个共同的主题。使用抽象层允许多个实现在软件系统中共存。使用一个抽象和多个实现的概念来执行从一个实现到另一个实现的迁移。确保系统始终都能正确构建和运行,因此在进行替换时,您可以继续使用Continuous Delivery。寻找尽可能多的逐渐进行更改的方法。
进一步阅读
FeatureToggles:在构建新功能时,我们可以使用FeatureToggles在测试环境中运行新供应商,并将其行为与有缺陷的供应商进行比较。