模组和插件冲突

林一二2023年07月21日 18:17

例子

时间系统冲突

根据动作里执行时间最长的动画,来决定这个动作结束的时间。一开始只有用到动画执行时间这个字段,但后来又加上了动画延迟执行这个字段,所以决定动作结束时间的逻辑就少考虑了一段时间。导致动作提前结束执行。

图层系统冲突

给背景图层clippath挖洞的时候,是通过把背景图层上的背景转移到另一个图层上,把原来的背景置为空,然后对另一个图层挖洞,从而在给背景挖洞时不影响背景图层的子图层。

结果在新增图层系统允许每个组件都可以把背景转移到另一个图层上,从而让背景超出组件大小。这边的「另一个图层」就导致背景图层那个转移操作取不到真正的背景了,没法对背景置空,导致背景实际上没有被挖洞。

解法

冲突是不可能避免的,因为需求是永远有冲突的。所以重点是提供更好的开发工具,让社区能够自己发现和解决问题。并允许用户通过调整优先级,来加载修复冲突的插件。

那就需要允许插件把逻辑拆分成很小的力度,这样修复冲突的插件也可以只修复一小块逻辑类似于patch,而不需要覆盖很多其他的逻辑,尽量保证遵循开闭原则。