如何使用开放/封闭原则或策略模式重构此 ruby 代码? 我知道主要思想是“软件实体(类、模块、函数等)应该对扩展开放,但对修改关闭”,但我如何在实践中使用它?
class PaymentService
def initialize(payment, payment_type)
@payment = payment
@payment_type = payment_type
end
def process
result = case payment_type
when 'first'
process_first
when 'second'
process_second
end
payment.save(result)
end
def process_first
'process_first'
end
def process_second
'process_second'
end
end
最佳答案
在此示例中,您可以构建一个对象,其中包含处理付款的类,而不是传递 payment_type
:
class FirstPayment
def process
'process_first'
end
end
class SecondPayment
def process
'process_second'
end
end
class PaymentService
def initialize(payment, payment_strategy)
@payment = payment
@payment_strategy = payment_strategy
end
def process
result = @payment_stategy.process
payment.save(result)
end
end
PaymentService.new(payment, FirstPayment.new)
因此,PaymentService
行为可以通过传递新策略(例如,ThirdPayment
)来扩展,但是不需要修改类,如果改变了处理第一笔或第二笔付款的逻辑。
关于ruby-on-rails - 如何使用开放/封闭原则或策略模式重构此 ruby 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51491421/