Java优化流程结构如何规整

wen java案例 28

本文目录导读:

Java优化流程结构如何规整

  1. 核心原则
  2. 条件判断优化
  3. 循环优化
  4. 异常处理优化
  5. 方法设计优化
  6. 代码组织规范
  7. 实战建议

我来详细讲解Java代码中流程结构的规整优化方法。

核心原则

单一职责原则

// ❌ 不规整:一个方法做太多事情
public void processOrder(Order order) {
    // 验证订单
    if (order == null || order.getItems().isEmpty()) {
        throw new IllegalArgumentException("订单无效");
    }
    // 计算价格
    double total = 0;
    for (Item item : order.getItems()) {
        total += item.getPrice() * item.getQuantity();
    }
    // 发送邮件
    sendEmail(order.getUserEmail(), "订单已处理");
    // 更新数据库
    updateDatabase(order);
}
// ✅ 规整:每个方法职责单一
public void processOrder(Order order) {
    validateOrder(order);
    double total = calculateTotal(order);
    updateStock(order);
    sendConfirmationEmail(order, total);
}
private void validateOrder(Order order) {
    if (order == null || order.getItems().isEmpty()) {
        throw new IllegalArgumentException("订单无效");
    }
}
private double calculateTotal(Order order) {
    return order.getItems().stream()
        .mapToDouble(item -> item.getPrice() * item.getQuantity())
        .sum();
}

尽早返回(Early Return)

// ❌ 不规整:深层嵌套
public String processUser(User user) {
    String result = "";
    if (user != null) {
        if (user.isActive()) {
            if (user.hasPermission()) {
                result = executeTask(user);
            } else {
                result = "无权限";
            }
        } else {
            result = "用户未激活";
        }
    } else {
        result = "用户不存在";
    }
    return result;
}
// ✅ 规整:尽早返回
public String processUser(User user) {
    if (user == null) {
        return "用户不存在";
    }
    if (!user.isActive()) {
        return "用户未激活";
    }
    if (!user.hasPermission()) {
        return "无权限";
    }
    return executeTask(user);
}

条件判断优化

卫语句替换条件嵌套

// ❌ 不规整
public double calculatePrice(Order order) {
    if (order != null) {
        if (order.isValid()) {
            if (order.hasDiscount()) {
                return order.getPrice() * 0.9;
            } else {
                return order.getPrice();
            }
        } else {
            throw new IllegalArgumentException("Invalid order");
        }
    } else {
        throw new IllegalArgumentException("Order is null");
    }
}
// ✅ 规整:卫语句
public double calculatePrice(Order order) {
    if (order == null) {
        throw new IllegalArgumentException("Order is null");
    }
    if (!order.isValid()) {
        throw new IllegalArgumentException("Invalid order");
    }
    return order.hasDiscount() 
        ? order.getPrice() * 0.9 
        : order.getPrice();
}

多态替代if-else

// ❌ 不规整:大量if-else
public double calculateShipping(String type, double weight) {
    if ("STANDARD".equals(type)) {
        return weight * 5;
    } else if ("EXPRESS".equals(type)) {
        return weight * 10 + 20;
    } else if ("OVERSEAS".equals(type)) {
        return weight * 15 + 50;
    } else {
        return 0;
    }
}
// ✅ 规整:策略模式
interface ShippingStrategy {
    double calculate(double weight);
}
class StandardShipping implements ShippingStrategy {
    public double calculate(double weight) {
        return weight * 5;
    }
}
class ExpressShipping implements ShippingStrategy {
    public double calculate(double weight) {
        return weight * 10 + 20;
    }
}
// 使用Map或工厂获取策略

循环优化

使用Stream API

// ❌ 不规整
List<String> result = new ArrayList<>();
for (User user : users) {
    if (user.isActive()) {
        String name = user.getName().toUpperCase();
        if (name.startsWith("A")) {
            result.add(name);
        }
    }
}
result.sort(Comparator.naturalOrder());
// ✅ 规整:Stream流式处理
List<String> result = users.stream()
    .filter(User::isActive)
    .map(user -> user.getName().toUpperCase())
    .filter(name -> name.startsWith("A"))
    .sorted()
    .collect(Collectors.toList());

避免循环中的重复计算

// ❌ 不规整
for (int i = 0; i < list.size(); i++) {  // 每次都调用size()
    if (list.get(i).getValue() > calculateThreshold()) {  // 每次都计算
        // 处理
    }
}
// ✅ 规整
int size = list.size();
double threshold = calculateThreshold();
for (int i = 0; i < size; i++) {
    if (list.get(i).getValue() > threshold) {
        // 处理
    }
}

异常处理优化

精确异常捕获

// ❌ 不规整
try {
    processFile(filename);
    saveToDatabase(data);
    sendNotification(email);
} catch (Exception e) {
    logger.error("处理失败", e);
    throw e;
}
// ✅ 规整
try {
    processFile(filename);
} catch (FileNotFoundException e) {
    logger.error("文件不存在: {}", filename);
    throw new BusinessException("文件未找到");
}
try {
    saveToDatabase(data);
} catch (SQLException e) {
    logger.error("数据库保存失败", e);
    throw new DataAccessException("保存数据失败");
}

try-with-resources

// ❌ 不规整
BufferedReader reader = null;
try {
    reader = new BufferedReader(new FileReader("file.txt"));
    return reader.readLine();
} finally {
    if (reader != null) {
        reader.close();
    }
}
// ✅ 规整
try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) {
    return reader.readLine();
}

方法设计优化

控制方法长度

// ❌ 不规整:方法太长
public void processOrder(Order order) {
    // 50行代码...
    // 验证、计算、更新、通知全在这里
}
// ✅ 规整:分解为小方法
public void processOrder(Order order) {
    validateOrder(order);
    double total = calculateOrderTotal(order);
    saveOrder(order, total);
    notifyCustomer(order.getCustomerEmail(), total);
}

减少参数数量

// ❌ 不规整:参数过多
public void createUser(String name, int age, String email, 
                       String phone, String address, String city, 
                       String zipCode) {
    // 实现
}
// ✅ 规整:使用参数对象
public void createUser(UserCreateRequest request) {
    // 实现
}
// 或使用建造者模式
User user = User.builder()
    .name("张三")
    .age(25)
    .email("zhangsan@example.com")
    .build();

代码组织规范

统一返回格式

// ✅ 规整:统一返回对象
public class ApiResult<T> {
    private int code;
    private String message;
    private T data;
    public static <T> ApiResult<T> success(T data) {
        return new ApiResult<>(200, "success", data);
    }
    public static <T> ApiResult<T> error(int code, String message) {
        return new ApiResult<>(code, message, null);
    }
}
// 使用统一返回
public ApiResult<User> getUser(Long id) {
    if (id == null) {
        return ApiResult.error(400, "参数错误");
    }
    User user = userService.findById(id);
    return ApiResult.success(user);
}

日志规范

// ✅ 规整:统一日志格式
private static final Logger logger = LoggerFactory.getLogger(OrderService.class);
public void processOrder(Order order) {
    logger.info("开始处理订单: orderId={}", order.getId());
    try {
        // 处理逻辑
        logger.debug("订单处理详细: items={}", order.getItems());
    } catch (Exception e) {
        logger.error("订单处理失败: orderId={}, error={}", 
                     order.getId(), e.getMessage(), e);
        throw e;
    }
    logger.info("订单处理完成: orderId={}", order.getId());
}

常量管理

// ❌ 不规整:魔法数字
if (status == 1) {
    discount = price * 0.9;
} else if (status == 2) {
    discount = price * 0.8;
}
// ✅ 规整:枚举或常量
public enum OrderStatus {
    NEW(1),
    ACTIVE(2),
    COMPLETED(3);
    private final int code;
    OrderStatus(int code) {
        this.code = code;
    }
}
public static final double NEW_USER_DISCOUNT = 0.9;
public static final double VIP_DISCOUNT = 0.8;

实战建议

代码审查清单

public class CodeReviewChecklist {
    // □ 每个方法是否只做一件事?
    // □ 是否有深层嵌套?(超过3层需要优化)
    // □ 是否存在大量if-else?(考虑多态或策略模式)
    // □ 循环中是否有重复计算?
    // □ 异常处理是否精确?
    // □ 资源是否正确关闭?
    // □ 参数是否过多?(超过5个考虑封装)
    // □ 是否有魔法数字?
    // □ 日志是否清晰?
    // □ 代码是否容易测试?
}

持续优化流程

  1. 代码审查:每次提交前自审
  2. 静态分析:使用SonarQube等工具
  3. 重构时机:每次修改相关代码时顺手优化
  4. 团队规范:建立统一的代码规范文档

规整的代码不仅美观,更重要的是可维护、易测试、易扩展,建议将优化融入日常开发习惯,而不是等代码变得混乱后再重构。

抱歉,评论功能暂时关闭!