重构代码之移动方法

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

一、何时使用移动方法?

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

二、举例说明

假设我们有一个 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 是一种增强代码结构的有效手段,特别是在分离职责和降低耦合度方面。通过正确地移动方法,可以让代码结构更加清晰,维护起来也更加方便。

相关推荐
数字孪生视频孪生4 小时前
空间智能技术|跨镜轨迹全域可溯,无感定位无扰赋能落地
大数据·运维·人工智能·重构·架构
微三云 - 廖会灵 (私域系统开发)10 小时前
存量社区破局:当物业困局遇上消费返物业费,重构社区商业新生态
大数据·人工智能·重构
智购科技自动贩卖机20 小时前
自动售货机嵌入式状态机设计实战:从45个事件源到层次型状态机的工程重构
大数据·人工智能·stm32·物联网·重构·硬件架构
2501_928996221 天前
GitLab CVE-2026-19478漏洞解析:Gitaly ref攻击绕过审计与中科热备下的代码资产保护重构
重构·gitlab
Qimooidea1 天前
祁木 CAD Translator 新版系统级重构与速度跃升实战
大数据·重构
微三云 - 廖会灵 (私域系统开发)1 天前
稀缺品类商业新范式:预售易货,重构高端商品的需求、库存与用户增长闭环
重构
天辛大师1 天前
天心大师谈重新学会传统文化,AI时代的心经奥义
大数据·人工智能·随机森林·重构·启发式算法
dog2501 天前
重构 BBR 的 buffer 动力学
重构
你别说话了1 天前
Webpack 如何迁移重构到 Vite
前端·webpack·重构
万岳科技系统开发1 天前
私域直播AI数字人系统:AI技术如何重构企业直播运营模式
大数据·人工智能·重构