Configuration 当新特性需要对代码库进行大量更改时,如何处理特性切换?

Configuration 当新特性需要对代码库进行大量更改时,如何处理特性切换?,configuration,language-agnostic,featuretoggle,Configuration,Language Agnostic,Featuretoggle,功能切换对于新功能非常有效-在大多数情况下,功能应该简单地由一些UI容器包围,这些容器将根据功能配置可见或不可见。但是,如果新特性需要对现有代码库进行大量更改,那么如何使用特性切换呢?我不能使用“复制和更改”,因为它显然比功能分支糟糕得多——我不会遇到任何合并冲突。那么,针对这些需求的最佳实践是什么呢?您可以将功能切换与IoC容器相结合,以加载组件的不同实现。例如,切换“A”加载实现“X”,而切换“B”加载实现“Y”。这种方法允许您维护并行实现,并基于单个切换打开传统和新功能。这种方法存在两个问

功能切换对于新功能非常有效-在大多数情况下,功能应该简单地由一些UI容器包围,这些容器将根据功能配置可见或不可见。但是,如果新特性需要对现有代码库进行大量更改,那么如何使用特性切换呢?我不能使用“复制和更改”,因为它显然比功能分支糟糕得多——我不会遇到任何合并冲突。那么,针对这些需求的最佳实践是什么呢?

您可以将功能切换与IoC容器相结合,以加载组件的不同实现。例如,切换“A”加载实现“X”,而切换“B”加载实现“Y”。这种方法允许您维护并行实现,并基于单个切换打开传统和新功能。

这种方法存在两个问题。第一个问题是,在旧代码中修复的bug不能在新代码中修复(不过,单元测试可能会有所帮助)。但是第二个也是一个主要的问题是,在创建新的实现之前,应该重写旧的实现(甚至不重构)。你能隐藏所有与你想要进行切换的“旧”特性相关的控件吗?或者将它们移动到新的UI容器中。例如,在WinAPI中,这只是创建一个控件列表并执行SetParent SetWindowPos。