背景:
假设有一个开源/第三方的软件模块ModuleA,我们要基于其上做特性的扩展。我见过的较多的做法是二者的代码实现揉在一起,这样会导致一个问题。当ModuleA做升级或者ModuleA替换成另一款ModuleB的时候,需要有大量的代码做Merge适配。这样带来的一个比较大的问题是,每次升级开源/三方软件,极大概率会出现漏合错合代码的现象。(我所经历的项目中,有因为漏合入一行代码,引入概率性问题,攻关一个月之久)。因此我们需要有一种方法,至少让自研代码和原始开源/三方软件的代码隔离开来,以插件式拼接的方式面对这种升级问题,而不是琐碎的侵入式穿插修改。
案例:
下面我们就以一个例子为主线,讲述一种在实战中使用的案例。实实在在解决了上述痛点问题。
假设原生开源/三方软件中有一个ModuleA,其中包含Func1,和Func2两个功能,见图1。
图1 ModuleA
假设此时,我们需要往ModuleA中增加一个功能FuncEx,以扩展ModuleA的逻辑从而满足我们的需求。其中调用关系为Func1->FuncEx->Func2。见图2
图2 ModuleA扩展
图2修改方法,其实已经进入了本文讲的问题痛点范畴ÿ