重构代码之移动方法

在代码重构中,移动方法 是一种将方法从一个类移动到另一个类的重构技术。这种重构主要用于解决类之间职责不清、依赖过重的问题。当一个方法对另一个类的数据或逻辑依赖过多时,把这个方法移动到它所依赖的类中,可以让代码更易读且更易维护。

一、何时使用移动方法?

如果发现一个方法经常访问其他类的数据或方法,或者仅对另一个类有意义时,这通常是一个信号,表明该方法可能不应该位于当前类中。通过将方法移动到更合适的类,可以增强代码的内聚性,减少类之间的耦合度,从而提高代码的可维护性。

二、举例说明

假设我们有一个 Order 类和一个 Customer 类。Order 类包含计算订单折扣的方法 CalculateDiscount(),但该方法严重依赖于 Customer 类中的数据。重构前的代码如下:

csharp 复制代码
public class Order
{
    public decimal Amount { get; set; }
    public Customer Customer { get; set; }

    public decimal CalculateDiscount()
    {
        if (Customer.IsLoyalCustomer)
        {
            return Amount * 0.10m; // loyal customers get a 10% discount
        }
        return 0;
    }
}

public class Customer
{
    public string Name { get; set; }
    public bool IsLoyalCustomer { get; set; }
}

在这里,CalculateDiscount() 方法虽然在 Order 类中,但它依赖于 CustomerIsLoyalCustomer 属性。为了更清晰的职责分离,可以将 CalculateDiscount() 方法移到 Customer 类中。

三、重构后的代码

在重构后,CalculateDiscount() 方法将被移至 Customer 类:

csharp 复制代码
public class Order
{
    public decimal Amount { get; set; }
    public Customer Customer { get; set; }

    public decimal GetDiscountedAmount()
    {
        return Amount - Customer.CalculateDiscount(Amount);
    }
}

public class Customer
{
    public string Name { get; set; }
    public bool IsLoyalCustomer { get; set; }

    public decimal CalculateDiscount(decimal amount)
    {
        if (IsLoyalCustomer)
        {
            return amount * 0.10m; // loyal customers get a 10% discount
        }
        return 0;
    }
}

四、重构后的优点

  1. 提高内聚性CalculateDiscount() 方法现在直接访问 Customer 的属性,更符合逻辑。
  2. 降低耦合度Order 类不再需要知道折扣的具体计算逻辑,只需要调用 Customer 的方法即可。
  3. 可维护性更高 :折扣逻辑集中在 Customer 类中,未来如需调整逻辑,不会影响 Order 类。

五、总结

Move Method 是一种增强代码结构的有效手段,特别是在分离职责和降低耦合度方面。通过正确地移动方法,可以让代码结构更加清晰,维护起来也更加方便。

相关推荐
hnult2 小时前
AI 在线考试全流程 :考试云七大核心 AI 功能深度解读
人工智能·笔记·重构·课程设计
飞Link21 小时前
AI 原生开发已至:从代码补全到自主仓库重构,Coding Agent 如何重塑程序员的终极形态?
人工智能·重构
云罗GEO1 天前
AI 超级员工:重构企业生产力,落地全场景数智化
人工智能·重构
2601_957190901 天前
超元力:以科技重构文旅体验,打造沉浸式娱乐新标杆
科技·重构·娱乐
科研前沿1 天前
SpaceOS™空间计算底座与五大自研引擎,实现多项关键技术突破
大数据·运维·人工智能·算法·重构
Python私教1 天前
从PySide6到Rich+FastAPI:如意Agent终端版架构重构全记录
重构·架构·fastapi
weixin_446260852 天前
架构白皮书:搜索引擎底层逻辑逆向重构与内容分发网络优化实践
搜索引擎·重构·架构
东方佑2 天前
色块语义Token化器V3:用语义压缩重构图像编码
人工智能·计算机视觉·重构
TDengine (老段)3 天前
红有软件重构智能油田时序数据底座,支撑生产实时感知与设备预测性维护
大数据·数据库·人工智能·重构·时序数据库·tdengine
Gary Studio3 天前
三相电压源逆变器电压重构原理
重构