模块设计原则

将判定所在模块合并到父模块中,使判定处于较高层次

控制范围覆盖影响范围/模块的作用范围应该在控制范围内

将受判定影响的模块下移到控制范围内

将判定上移到层次较高ss的位置


⚠️ 常见陷阱(考试爱考点)

错误做法为什么不行
把父模块下移破坏层次结构,逻辑混乱(就像上一题 D 选项)
一个模块管太多事内聚性差,维护困难
判定分散在多个子模块控制分散,导致控制范围覆盖不了作用范围
模块过细/过粗过细:层次过多效率低;过粗:耦合度高难维护

代码举例

❌ 错误示例:把父模块下移(层次乱掉)

public class OrderSystem {

    // 父模块下移:控制逻辑写在底层(错误做法)
    public void processOrder(String userType, double amount) {
        PaymentModule paymentModule = new PaymentModule();
        paymentModule.pay(userType, amount);
    }
}

class PaymentModule {

    // 这里居然做了“父模块”的控制逻辑 → 把父模块下移了
    public void pay(String userType, double amount) {
        if ("VIP".equals(userType)) {
            System.out.println("VIP 用户,享受 20% 折扣");
            System.out.println("支付金额:" + amount * 0.8);
        } else {
            System.out.println("普通用户,支付金额:" + amount);
        }
    }
}

👉 问题:

  • PaymentModule 本来应该只管“支付”,结果却写了“VIP 判定逻辑”。
  • 父模块(业务规则)下移到子模块(支付),违反了“控制范围覆盖作用范围”的原则。
  • 这样做会导致:后续如果要修改用户类型逻辑,要动支付模块,模块间耦合度大大增加。

✅ 正确示例:父模块在上层控制

public class OrderSystem {

    // 父模块负责控制逻辑
    public void processOrder(String userType, double amount) {
        double payAmount = amount;

        if ("VIP".equals(userType)) {
            payAmount = amount * 0.8; // 折扣逻辑
        }

        PaymentModule paymentModule = new PaymentModule();
        paymentModule.pay(payAmount);
    }
}

class PaymentModule {

    // 子模块只管“支付”功能,不掺杂业务判定逻辑
    public void pay(double amount) {
        System.out.println("支付金额:" + amount);
    }
}

“把父模块下移”就像老板写代码,没人全局指挥,乱套了。正确做法是:判定逻辑上移,执行逻辑下放