【发布时间】:2020-12-10 11:28:35
【问题描述】:
我有三个验证器,每个验证器依次依赖于前一个。我可能会使用所有三个或仅使用前两个或仅使用第一个。例如
- 验证器 1:检查用户是否存在
- 验证器 2:检查请求的订单是否存在于用户的订单历史记录中
- 验证器 3:检查该订单是否有取消选项
如果不满足前一个条件,此列表中的每个验证器都会抛出错误。我目前正在使用这种模式:
function validator1() { ... }
function validator2() { validator1(); ... }
function validator3() { validator2(); ... }
但这对我来说感觉像是一种反模式,因为所有先决条件验证都是隐式完成的,所以当我运行 validtor2() 时,并不清楚 validator1() 是否也在运行。
我也考虑过这样做:
function validator1() { ... }
function validator2() { ... }
function validator3() { ... }
function someTask() { validator1(); validator2(); validator3(); ... }
但这是不安全的,因为没有什么能阻止我运行 validator3() 并在条件 2 未满足时抛出错误。
有没有一种既安全又明确的方法来做到这一点?
编辑
这是公认答案中提到的设计模式的一个很好的参考:https://refactoring.guru/design-patterns/chain-of-responsibility
【问题讨论】:
标签: function validation design-patterns coding-style refactoring