重构代码之移动方法

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

一、何时使用移动方法?

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

二、举例说明

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

相关推荐
小瓜6698 小时前
Claude Code替代软件哪个好?TRAE vs Claude Code深度对比:从中文开发、复杂重构到团队成本
重构
爱聊灵光的维C21 小时前
从看见世界到重构认知:在视觉与硬件的交汇处,寻找我们这代人的北极星
c语言·物联网·计算机视觉·重构·硬件工程·射频工程
Allen_LVyingbo1 天前
NVIDIA CUDA Tile 在医疗计算中的算子形式化、算法重构与内核实现
大数据·python·算法·重构·知识图谱·健康医疗·数据库架构
AI_work1 天前
43 号令下招投标全流程留痕分析:电子卷宗 15 年保存与投标人文档合规体系重构
大数据·人工智能·ai·重构
不是万能的豆学长2 天前
游戏重构生活平衡新方式
游戏·重构·生活
云边有个稻草人2 天前
MongoDB迁移不止是数据搬家:用KingbaseES重构文档数据开发
数据库·mongodb·重构·国产数据库·信创数据库·数据库国产化·mongodb迁移
热文新讯3 天前
海鸥医陪:以标准化力量,重构陪诊行业信任底色
重构
水无痕simon3 天前
3、工程重构
java·spring cloud·重构
johnsong3 天前
AI前沿日报 · 2026-10-30 | 重构时刻——当基础设施开始重新洗牌
人工智能·重构
向上的车轮4 天前
合同去哪了,新合同从哪来?——软件行业付费逻辑重构
重构·fed·业务分析师