重构之Pull Up Field ,Push Down Field 与Rename(method,class,parameter)笔记
Pull Up Field
两个子类中包含重复的常量,为了提高复用性将字段上移到基类中。
public abstract class Account
{
}
public class CheckAccount : Account
{
private decimal _minCheckBalance = 5m;
}
public class SaveAccount : Account
{
private decimal _minSaveBalance = 5m;
}
{
}
public class CheckAccount : Account
{
private decimal _minCheckBalance = 5m;
}
public class SaveAccount : Account
{
private decimal _minSaveBalance = 5m;
}
提高复用性,如下
public abstract class Account
{
//protected 该类以及子类有特有的
protected decimal _minCheckBalance = 5m;
}
public class CheckAccount : Account
{
}
public class SaveAccount : Account
{
}
{
//protected 该类以及子类有特有的
protected decimal _minCheckBalance = 5m;
}
public class CheckAccount : Account
{
}
public class SaveAccount : Account
{
}
Push Down Field
基类中的一个字符串字段只被一个子类使用,因此可以进行下移。只要没有其他子类使用基类的字段时,就应该立即执行该重构。
public abstract class Task
{
protected string _resolution;
}
public class BugTask : Task
{
}
public class FeatureTask : Task
{
}
{
protected string _resolution;
}
public class BugTask : Task
{
}
public class FeatureTask : Task
{
}
修改后
public abstract class Task
{
}
public class BugTask : Task
{
//为BuugTask特有
private string _resolution;
}
public class FeatureTask : Task
{
}
{
}
public class BugTask : Task
{
//为BuugTask特有
private string _resolution;
}
public class FeatureTask : Task
{
}
Rename(method,class,parameter)
这个重构只需将名称修改得更具描述性、更容易传达其含义即可。

public class Emp
{
public string FN { get; set; }
public decimal ClcHrP()
{
return 0m;
}
}
//修改后更加清晰,一目了然
public class Employee
{
public string FirstName { get; set; }
public decimal CalculateHourPay()
{
return 0m;
}
}
{
public string FN { get; set; }
public decimal ClcHrP()
{
return 0m;
}
}
//修改后更加清晰,一目了然
public class Employee
{
public string FirstName { get; set; }
public decimal CalculateHourPay()
{
return 0m;
}
}
【推荐】国内首个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 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架