Page 66 - 4787
P. 66

}

                     Після проведення рефакторингу


                     if (basePrice() > 1000) {

                      return basePrice() * 0.95;
                     }

                     else {

                      return basePrice() * 0.98;
                     }

                     double basePrice() {

                      return _quantity * _itemPrice;
                      }


                     Проблема з цими змінними в тому, що вони тимчасові і локальні. Оскільки

               вони  видимі  лише  в  контексті  методу,  в  якому  використовуються,  тимчасові


               змінні ведуть до збільшення розмірів методів, тому що тільки так можна до них


               дістатися. Після заміни тимчасової змінної методом запиту, отримати які у ній

               дані може будь-який метод класу. Це істотно сприяє отриманню якісного коду


               для  класу.  «Заміна  тимчасової  змінної  викликом  методу»  (Replace  Temp  with


               Query) часто являє собою необхідний крок перед «Виділенням методу» (Extract

               Method).  Локальні  змінні  ускладнюють  виділення,  тому  замініть  якомога


               більше змінних викликами методів. Простими випадками даного рефакторингу

               є такі, в яких присвоювання тимчасовим змінним здійснюється одноразово, і ті,


               в  яких  вираз  бере  участь  у  присвоєнні,  вільний  від  побічних  ефектів.  Решта


               ситуацій  складніша,  але  можна  розв'язати.  Полегшити  становище  можуть

               попереднє  «Розщеплення  тимчасової  змінної»  (Split  Temporary  Variable)  і


               «Поділ запиту і модифікатора» (Separate Query from Modifier) . Якщо тимчасова


               змінна служить для накопичення результату (наприклад, при підсумовуванні в

               циклі), відповідна логіка повинна бути відтворена в методі запиту.





                                                                                                             65
   61   62   63   64   65   66   67   68   69   70   71