3

いくつかの重要な生産ルーチンを最初から書き直す必要があります。簡単な例を見てみましょう:

public class ProductionClass {
    public IList<Values> WillBeFiredIfThisBreaks(Input input) {
       ...
    }
}

入力オブジェクトには、単体テストを十分に行うには順列が多すぎます。これらのルーチンは日常的に頻繁に使用されるため、安全にプレイしたいと考えています。だから、私の考えは次のとおりでした:

1) 名前を変更し、現在の実装を古いものとしてマークします。

2) 問題が発生した場合に古い実装にフォールバックする新しい実装を作成します (以下を参照)。

3) 新しい実装が本番環境で 1 ~ 2 か月問題なく実行されたら、古い実装を削除します。

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 に答える