3

我有一些关键的生产程序需要从头开始重写。举个简单的例子:

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 框架或设计模式可以让这种“极度偏执”的代码重写得更优雅一些?

4

1 回答 1

0

由于您要求一种模式,因此可能的响应是将 AOP 与方法编织一起使用。但更好的回应是将您的精力集中在创建单元测试上。

于 2013-03-19T05:54:37.713 回答