Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Refatoring type: Separate Query from Modifier
- // Проблема на входе: метод не только возвращает значение, но и изменяет состояние объекта
- // Решение: создать два отдельных метода: один для запроса, другой - для модификации.
- // Пример:
- // before refactoring
- class Employee {
- public int employeeID_;
- public Money yearBill_; // сумма денег, заработанная за год
- public void main() {
- Employee *michael = Employee();
- Money bill = michael.getMontlyBill();
- System.out.println(bill);
- }
- public Money getMonthlyBill() {
- Money montlyBill = sqlExecute("SELECT monthlyBill FROM billingTable WHERE employeeID = %d", employeeID_);
- if (montlyBill < 0) {
- yearBill_ -= montlyBill; // side effect - изменяется состояние объекта
- }
- return montlyBill;
- }
- }
- // after refactoring
- class Employee {
- public void main() {
- Employee *michael = Employee();
- Money bill = michael.getMontlyBill();
- if (bill < 0) {
- System.out.println("ERROR: Montly bill is less, than zero.");
- michael.setYearBillValue(michael.yearBill - bill);
- } else {
- System.out.println(bill);
- }
- }
- public Money getMonthlyBill() {
- return sqlExecute("SELECT monthlyBill FROM billTable WHERE employeeID = %d", employeeID_);
- }
- public void setYearBillValue(Money newValue) {
- yearBill_ = newValue;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement