重构代码之移动方法

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

一、何时使用移动方法?

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

二、举例说明

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

相关推荐
辣机小司40 分钟前
【踩坑记录:EasyExcel 生产级实战:策略模式重构与防御性导入导出校验指南(实用工具类分享)】
java·spring boot·后端·重构·excel·策略模式·easyexcel
无代码专家19 小时前
无代码:重构企业数字化转型的效率逻辑
大数据·人工智能·低代码·重构
yugi9878381 天前
基于Takens嵌入定理和多种优化算法的混沌序列相空间重构MATLAB实现
算法·matlab·重构
乾元1 天前
当网络变成博弈场:混合云时代,如何用 AI 重构跨域链路的成本与体验平衡
运维·网络·人工智能·网络协议·安全·华为·重构
龙亘川1 天前
大模型重构政务热线:技术架构、场景落地与实战案例全解析
重构·架构·政务
说私域1 天前
社群经济视域下智能名片链动2+1模式商城小程序的商业价值重构
人工智能·小程序·重构·开源
GEO AI搜索优化助手2 天前
生成式AI搜索的跨行业革命与商业模式重构
大数据·人工智能·搜索引擎·重构·生成式引擎优化·ai优化·geo搜索优化
程序员佳佳3 天前
GPT-4时代终结?GPT-5.2与Banana Pro实测数据公开,普通开发者如何接住这泼天富贵
开发语言·python·gpt·chatgpt·重构·api·midjourney
久思无邪3 天前
妲鹭Darwur:以医疗级守护,重构居家呼吸美学
重构
yiersansiwu123d3 天前
生成式AI落地潮:从技术狂热到商业价值重构
人工智能·重构