代码坏味道:夸夸其谈通用性

夸夸其谈通用性 (Speculative Generality)

解释
夸夸其谈通用性指的是为了未来可能的扩展或复用,过度设计和实现了许多当前并不需要的功能或抽象。这种做法会导致代码复杂度增加,难以维护和理解,而这些所谓的“通用性”在未来很可能并不会被用到。

解决方法

  1. 简化代码:移除那些为了将来可能的需求而设计的过度抽象和通用性代码,只保留当前实际需要的功能。
  2. YAGNI原则:遵循YAGNI(You Aren’t Gonna Need It)原则,只实现当前确实需要的功能,而不是未来可能需要的功能。

例子

夸夸其谈通用性的代码

重构前

public abstract class Payment {
    public abstract void processPayment(double amount);
}

public class CreditCardPayment extends Payment {
    @Override
    public void processPayment(double amount) {
        // 处理信用卡支付
        System.out.println("Processing credit card payment of " + amount);
    }
}

public class PayPalPayment extends Payment {
    @Override
    public void processPayment(double amount) {
        // 处理PayPal支付
        System.out.println("Processing PayPal payment of " + amount);
    }
}

public class PaymentProcessor {
    private Payment payment;

    public PaymentProcessor(Payment payment) {
        this.payment = payment;
    }

    public void process(double amount) {
        payment.processPayment(amount);
    }
}

// 主程序
public class Main {
    public static void main(String[] args) {
        PaymentProcessor processor = new PaymentProcessor(new CreditCardPayment());
        processor.process(100.0);
    }
}

重构后的代码

重构后

public class PaymentProcessor {
    public void processCreditCardPayment(double amount) {
        // 处理信用卡支付
        System.out.println("Processing credit card payment of " + amount);
    }

    public void processPayPalPayment(double amount) {
        // 处理PayPal支付
        System.out.println("Processing PayPal payment of " + amount);
    }
}

// 主程序
public class Main {
    public static void main(String[] args) {
        PaymentProcessor processor = new PaymentProcessor();
        processor.processCreditCardPayment(100.0);
    }
}

说明

  • 重构前Payment类及其子类CreditCardPaymentPayPalPayment,以及PaymentProcessor类,都是为了支持未来可能的多种支付方式而设计的。这种设计虽然具有一定的灵活性,但增加了代码的复杂性,而且在当前只需要处理信用卡支付和PayPal支付的情况下,这种设计显得过于复杂和冗余。
  • 重构后:简化了设计,直接在PaymentProcessor类中实现了processCreditCardPaymentprocessPayPalPayment方法。这种方式更加直接和简单,去除了不必要的抽象和复杂性。

通过移除夸夸其谈通用性的设计,代码变得更简单,更容易理解和维护。遵循YAGNI原则,只实现当前确实需要的功能,可以避免过度设计带来的负担和问题。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值