31日間の再構築ガイドラインの18:使用条件判断代替異常

2413 ワード

今日お話しする再構築は、他の場所ではなく、私の日常の仕事の発見から来ています.私は日常の仕事でよくこの再構築を使用しています.今日解決しなければならない問題に対して、他の解決策があるかもしれません.
日常的な符号化では、プログラムフローを制御するために異常を使用することがよくあります.次のコードが例です.
    1: public class Microwave
   2: {
   3:     private IMicrowaveMotor Motor { get; set;}
   4:  
   5:     public bool Start(object food)
   6:     {
   7:         bool foodCooked = false;
   8:         try
   9:         {
  10:             Motor.Cook(food);
  11:             foodCooked = true;
  12:         }
  13:         catch(InUseException)
  14:         {
  15:             foodcooked = false;
  16:         }
  17:  
  18:         return foodCooked;
  19:     }
  20: }
 
              ,                                  。                 ,   
                   ,                。
   1: public class Microwave
   2: {
   3:     private IMicrowaveMotor Motor { get; set; }
   4:  
   5:     public bool Start(object food)
   6:     {
   7:         if (Motor.IsInUse)
   8:             return false;
   9:  
  10:         Motor.Cook(food);
  11:  
  12:         return true;
  13:     }
  14: }

 
原文リンク:http://www.lostechies.com/blogs/sean_chambers/archive/2009/08/18/refactoring-day-18-replace-exception-with-conditional.aspx