いくつかの重要な生産ルーチンを最初から書き直す必要があります。簡単な例を見てみましょう:
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 フレームワークまたはデザイン パターンはありますか?