重构思路
- 设计模式应用:
- 策略模式:对于
calculate_total_price
方法中涉及的复杂计算,可将不同计算逻辑(如商品价格计算、折扣计算、运费计算)封装成不同策略类。这样在计算总价时,可以根据不同场景灵活切换策略。
- 责任链模式:
validate_order
方法需要检查多项条件,可将每个检查条件封装成一个处理者对象,通过责任链依次传递订单对象进行检查,使得代码结构更清晰,易于扩展新的检查条件。
- 命令模式:
process_order
方法包含多个不同操作,可将每个操作(如生成订单号、更新库存、发送邮件通知)封装成命令对象,这样方便对操作进行管理和扩展。
- 代码结构优化:
- 方法拆分:将复杂方法拆分成更小的、功能单一的方法,提高代码的内聚性。
- 提取类:如果某些方法或数据具有较高的相关性,可以提取成独立的类,降低
Order
类的复杂度。
关键重构点伪代码示例
- 策略模式 - calculate_total_price重构
# 策略类 - 商品价格计算
class ProductPriceCalculator
def calculate(product)
# 商品价格计算逻辑
end
end
# 策略类 - 折扣计算
class DiscountCalculator
def calculate(order)
# 折扣计算逻辑
end
end
# 策略类 - 运费计算
class ShippingFeeCalculator
def calculate(order)
# 运费计算逻辑
end
end
class Order
def initialize(product_price_calculator, discount_calculator, shipping_fee_calculator)
@product_price_calculator = product_price_calculator
@discount_calculator = discount_calculator
@shipping_fee_calculator = shipping_fee_calculator
end
def calculate_total_price
product_price = @product_price_calculator.calculate(self.product)
discount = @discount_calculator.calculate(self)
shipping_fee = @shipping_fee_calculator.calculate(self)
product_price - discount + shipping_fee
end
end
- 责任链模式 - validate_order重构
# 抽象处理者
class OrderValidator
def initialize(next_validator = nil)
@next_validator = next_validator
end
def validate(order)
if can_validate?(order)
result = do_validate(order)
return result if result == false
end
@next_validator&.validate(order)
end
def can_validate?(order)
raise NotImplementedError
end
def do_validate(order)
raise NotImplementedError
end
end
# 用户信息检查处理者
class UserInfoValidator < OrderValidator
def can_validate?(order)
true
end
def do_validate(order)
# 用户信息检查逻辑
end
end
# 商品库存检查处理者
class ProductStockValidator < OrderValidator
def can_validate?(order)
true
end
def do_validate(order)
# 商品库存检查逻辑
end
end
class Order
def validate_order
user_validator = UserInfoValidator.new(ProductStockValidator.new)
user_validator.validate(self)
end
end
- 命令模式 - process_order重构
# 抽象命令类
class OrderCommand
def execute(order)
raise NotImplementedError
end
end
# 生成订单号命令
class GenerateOrderNumberCommand < OrderCommand
def execute(order)
# 生成订单号逻辑
end
end
# 更新库存命令
class UpdateStockCommand < OrderCommand
def execute(order)
# 更新库存逻辑
end
end
# 发送邮件通知命令
class SendEmailNotificationCommand < OrderCommand
def execute(order)
# 发送邮件通知逻辑
end
end
class Order
def process_order
commands = [GenerateOrderNumberCommand.new, UpdateStockCommand.new, SendEmailNotificationCommand.new]
commands.each do |command|
command.execute(self)
end
end
end