重构:Move Method 笔记
重构:Move Method
Move Method就是将方法迁移到合适的位置。
条件:当一个方法被其他类使用比在它所在类中的使用还要频繁时,我们就需要将方法迁移到更频繁地使用它的类中(Move Method重构)
范例如下:

public class BankAccount
{
public BankAccount(int accountNum)
{
AccountNum = accountNum;
}
public int AccountNum { get; private set; }
public double CalculateInterestRate()
{
if (AccountNum > 800)
return 0.02;
if (AccountNum > 10&&AccountNum<=800)
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; }
}
}
{
public BankAccount(int accountNum)
{
AccountNum = accountNum;
}
public int AccountNum { get; private set; }
public double CalculateInterestRate()
{
if (AccountNum > 800)
return 0.02;
if (AccountNum > 10&&AccountNum<=800)
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; }
}
}
发现后者比前者使用标注中的方法的频率更高,因此将该方法移动至后者中。
修改后代码:

public class BankAccount
{
public BankAccount(int accountNum)
{
AccountNum = accountNum;
}
public int AccountNum { 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.AccountNum > 800)
return 0.02;
if (Account.AccountNum > 10 && Account.AccountNum <= 800)
return 0.03;
return 0.05;
}
}
{
public BankAccount(int accountNum)
{
AccountNum = accountNum;
}
public int AccountNum { 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.AccountNum > 800)
return 0.02;
if (Account.AccountNum > 10 && Account.AccountNum <= 800)
return 0.03;
return 0.05;
}
}
代码操作更加清晰,直观。功能单一化。
分类:
[25] Refactory
标签:
Refactory
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架