我有一些关键的生产程序需要从头开始重写。举个简单的例子:
public class ProductionClass {
public IList<Values> WillBeFiredIfThisBreaks(Input input) {
...
}
}
输入对象的排列太多,无法彻底进行单元测试,我想安全地玩它,因为这些例程每天都被大量使用。所以,我的想法是:
1) 重命名当前实现并将其标记为过时。
2)编写一个新的实现,如果有任何问题,它会退回到旧的实现(见下文)
3) 在新的实现在 prod 中运行一两个月没有问题后,删除旧的实现。
public class ProductionClass {
public IList<Values> WillBeFiredIfThisBreaks(Input input) {
try{
var ret = NewImpl(input);
} catch(Exception){
ret = null;
}
if(ret == null || ret.Count == 0){
Log.Error("NewImpl Failed! Inputs: {0}", inputs);
return OldImpl(input);
}
return ret;
}
public IList<Values> NewImpl(Input input) {
...
}
[Obsolete("Rewritten 03/18/2013, throw away once NewImpl confirmed stable", false)]
public IList<Values> OldImpl(Input input) {
...
}
}
上面的方法有点难看,因为我必须为我需要重写的每个方法重新创建这个逻辑。(当新代码确认稳定时,我将相应地需要删除回退逻辑并删除每个位置的过时方法)。所以我的问题是:是否有任何 .NET 框架或设计模式可以让这种“极度偏执”的代码重写得更优雅一些?