代码重构挑战:Java简化复杂逻辑实例
在Java编程中,经常需要处理复杂的业务逻辑。以下是一个简化复杂逻辑的实例,我们假设有一个库存管理系统:
原始代码(可能存在的问题和冗余):
public class InventorySystem {
private List<Product> products;
// constructor, getters and setters
public void processOrder(Order order) {
for (Product product : order.getProducts()) {
if (!products.contains(product)) {
System.out.println("Adding product to inventory: " + product);
products.add(product);
} else {
System.out.println("Updating product in inventory: " + product);
}
}
// 计算订单总价并更新库存
double total = order.calculateTotal();
if (total > 0) {
System.out.println("Order processed. Total: " + total);
// 根据订单数量减少库存
for (Product product : order.getProducts()) {
products.remove(product);
if (product.getQuantity() > 0) {
int remaining = product.getQuantity() - order.getProducts().get(index).getQuantity();
if (remaining > 0) {
System.out.println("Reducing inventory for " + product + ": " + remaining);
products.add(product.withQuantity(remaining)));
} else {
System.out.println("No inventory to reduce for " + product);
}
}
}
} else {
System.out.println("Order cannot be processed due to negative total.");
}
}
}
重构实例:
将
processOrder
方法拆分为多个方法,例如addProductToInventory
、updateProductInInventory
等。创建一个
InventoryService
类来管理库存逻辑,将processOrder
调用移到服务中。优化代码结构和命名规范,提高可读性和维护性。
重构后的代码示例:
import java.util.ArrayList;
import java.util.List;
public class InventorySystem {
private List<Product> products = new ArrayList<>();
// constructor, getters and setters
public void addProductToInventory(Product product) {
if (!products.contains(product)) {
System.out.println("Adding product to inventory: " + product);
products.add(product);
} else {
System.out.println("Updating product in inventory: " + product);
}
}
// ...其他方法
public void processOrder(Order order) {
for (Product product : order.getProducts()) {
InventoryService service = new InventoryService(products);
String operationResult;
if (!products.contains(product)) {
operationResult = "Adding product to inventory: " + product;
} else {
operationResult = "Updating product in inventory: " + product;
}
System.out.println(operationResult);
// 根据逻辑进行库存操作
service.productInInventoryAction(product, order));
// ...其他逻辑处理
}
}
}
class InventoryService {
private List<Product> products;
public InventoryService(List<Product> products) {
this.products = products;
}
// ...产品库存操作方法
}
class Product {
// ...属性和构造器
// ...产品库存操作方法(用于InventoryService)
}
这个重构后的代码示例更清晰地展示了如何将复杂的逻辑拆分为多个可管理的方法。
还没有评论,来说两句吧...