Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.51 KB | None | 0 0
  1. // Refatoring type: Separate Query from Modifier
  2. // Проблема на входе: метод не только возвращает значение, но и изменяет состояние объекта
  3. // Решение: создать два отдельных метода: один для запроса, другой - для модификации.
  4.  
  5. // Пример:
  6. // before refactoring
  7. class Employee {
  8.     public int employeeID_;
  9.     public Money yearBill_; // сумма денег, заработанная за год
  10.    
  11.     public void main() {
  12.         Employee *michael = Employee();
  13.         Money bill = michael.getMontlyBill();
  14.         System.out.println(bill);
  15.     }
  16.    
  17.     public Money getMonthlyBill() {
  18.         Money montlyBill = sqlExecute("SELECT monthlyBill FROM billingTable WHERE employeeID = %d", employeeID_);
  19.         if (montlyBill < 0) {
  20.             yearBill_ -= montlyBill; // side effect - изменяется состояние объекта       
  21.         }
  22.         return montlyBill;
  23.     }  
  24. }
  25.  
  26.  
  27. // after refactoring
  28. class Employee {
  29.     public void main() {
  30.         Employee *michael = Employee();
  31.         Money bill = michael.getMontlyBill();
  32.        
  33.         if (bill < 0) {
  34.             System.out.println("ERROR: Montly bill is less, than zero.");
  35.             michael.setYearBillValue(michael.yearBill - bill);
  36.         } else {
  37.             System.out.println(bill);
  38.         }
  39.     }
  40.    
  41.     public Money getMonthlyBill() {
  42.         return sqlExecute("SELECT monthlyBill FROM billTable WHERE employeeID = %d", employeeID_);
  43.     }  
  44.    
  45.     public void setYearBillValue(Money newValue) {
  46.         yearBill_ = newValue;
  47.     }
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement