重构代码之提取子类

提取子类主要用于精简类结构和增强代码的灵活性。这个方法适用于当类中的某些字段或方法只适用于特定对象的情况。通过提取子类,可以将这些特定的字段和方法分离到一个新的子类中,使代码结构更清晰。

一、为什么要使用提取子类

  1. 提高代码的可读性:当类包含与特定需求无关的字段和方法时,类会显得冗杂。提取子类后,代码的职责会变得更加清晰。
  2. 增强扩展性和复用性:将特定功能放入子类,便于在不修改原始类的情况下进行扩展。
  3. 减少条件判断 :避免主类中使用大量条件语句(如 if 和 switch)来处理不同的对象类型。

二、示例

假设我们有一个 Employee 类,其中包含了部分只适用于销售人员的属性和方法,例如 salesTarget 和 achieveSalesTarget() 方法:

csharp 复制代码
public class Employee
{
    public string Name { get; set; }
    public decimal Salary { get; set; }
    public decimal SalesTarget { get; set; }

    public Employee(string name, decimal salary)
    {
        Name = name;
        Salary = salary;
    }

    public void AchieveSalesTarget()
    {
        Console.WriteLine($"{Name} 已经完成了销售目标");
    }
}

对于非销售人员的员工对象,这些特定的字段和方法可能毫无意义。此时我们可以考虑提取一个 SalesEmployee 子类,来包含这些特定于销售的逻辑。

2.1 重构后的代码

通过提取 SalesEmployee 子类,将销售相关的内容与一般员工类分离:

csharp 复制代码
public class Employee
{
    public string Name { get; set; }
    public decimal Salary { get; set; }

    public Employee(string name, decimal salary)
    {
        Name = name;
        Salary = salary;
    }
}

public class SalesEmployee : Employee
{
    public decimal SalesTarget { get; set; }

    public SalesEmployee(string name, decimal salary, decimal salesTarget)
        : base(name, salary)
    {
        SalesTarget = salesTarget;
    }

    public void AchieveSalesTarget()
    {
        Console.WriteLine($"{Name} has achieved the sales target!");
    }
}

现在 SalesEmployee 仅包含销售相关的逻辑,而 Employee 类保持简洁,包含通用属性。对于非销售员工,只需使用 Employee 类即可。

三、适用场景

  • 类中存在特定逻辑:当类包含仅针对某些情况或对象的逻辑时。
  • 频繁出现条件语句:当某些属性和方法通过条件语句控制时,通过提取子类可以减少分支判断。

四、使用提取子类的好处

  • 职责单一:每个类承担单一职责,遵循单一职责原则。
  • 代码易于扩展:新特性可以通过子类化实现,而不会污染主类。
  • 减少重复代码:在父类和子类之间共用通用逻辑,减少重复代码。

重构代码是一种常用的重构方式,尤其在类职责不明确、逻辑过于混杂时可以起到显著优化效果。

相关推荐
微三云 - 廖会灵 (私域系统开发)5 天前
企业大模型应用工程化思考:跳出 Demo 陷阱,构建「业务‑资产‑Agent」三层落地架构
人工智能·矩阵·重构
慧都小项5 天前
Python 跨文件重构怎么验证?PyCharm 用法查找、重构预览与测试流程
python·重构·pycharm·单元测试
江畔柳前堤6 天前
字节跳动·大模型应用知识手册
前端·人工智能·深度学习·opencv·目标检测·重构·transformer
微三云 - 廖会灵 (私域系统开发)8 天前
私域电商多端商城系统架构实践:小程序 / APP / H5 一套后端如何落地
矩阵·重构·零售
智慧物业老杨8 天前
人机协同的物业服务重构:技术落地路径与系统化思考
java·大数据·人工智能·重构·系统架构
微三云 - 廖会灵 (私域系统开发)8 天前
多端商城统一账号体系设计实践:小程序 / APP / H5 登录打通与账号合并
矩阵·重构·自动化·零售
微三云 - 廖会灵 (私域系统开发)10 天前
裂变营销系统架构设计:推三返一(三三循环)模式业务拆解、奖励算法与合规方案
重构·自动化·零售
江畔柳前堤10 天前
On-Policy Distillation 全景深潜
人工智能·网络协议·目标检测·http·机器学习·chatgpt·重构
液态不合群12 天前
低代码不是捷径,是企业数字化转型的底层重构
低代码·重构
Alinket12 天前
当 AI 走进传感器:嵌入式人工智能如何重构设备智能
人工智能·物联网·重构·健康医疗·无线通信·智能硬件·iot