Переміщення методуПеремі́щення ме́тоду (англ. Move Method) - це прийом рефакторингу, який базується на принципі перенесення методу з одного класу в інший, який більше його використовує. ПроблемаПевний створений метод після його створення, почав використовуватися іншим класом більше, ніж у власним. РішенняПотрібно створити новий метод в класі, який використовує його більше за інших, в який перенесться код із старого методу. При цьому код оригінального методу потрібно перетворити на звернення до нового методу в іншому класі або прибрати його взагалі. Причини рефакторингу
Порядок проведення
Приклад використання прийомуВиконано мовою C#: public class BankAccount { public BankAccount(int accountAge, int creditScore, AccountInterest accountInterest) { AccountAge = accountAge; CreditScore = creditScore; AccountInterest = accountInterest; } public int AccountAge { get; private set; } public int CreditScore { get; private set; } public AccountInterest AccountInterest { get; private set; } public double CalculateInterestRate() { if (CreditScore > 800) return 0.02; if (AccountAge > 10) return 0.03; return 0.05; } } public class AccountInterest { public BankAccount Account { get; private set; } public AccountInterest(BankAccount account) { Account = account; } public double InterestRate { get { return Account.CalculateInterestRate(); } } public bool IntroductoryRate { get { return Account.CalculateInterestRate() < 0.05; } } } Увага в даному прикладі звертається на метод BankAccount.CalculateInterest, в якому як можна помітити, можливо дуже зручно перемістити метод. Після застосування прийому рефакторингу, отримуємо наступні зміни: public class BankAccount { public BankAccount(int accountAge, int creditScore, AccountInterest accountInterest) { AccountAge = accountAge; CreditScore = creditScore; AccountInterest = accountInterest; } public int AccountAge { get; private set; } public int CreditScore { get; private set; } public AccountInterest AccountInterest { get; private set; } } public class AccountInterest { public BankAccount Account { get; private set; } public AccountInterest(BankAccount account) { Account = account; } public double InterestRate { get { return CalculateInterestRate(); } } public bool IntroductoryRate { get { return CalculateInterestRate() < 0.05; } } public double CalculateInterestRate() { if (Account.CreditScore > 800) return 0.02; if (Account.AccountAge > 10) return 0.03; return 0.05; } } Бореться з запахами
Прийоми рефакторингу, яким допомагає переміщення методу
Схожі рефакторинги
Посилання
|