Oop 传递代理/策略与返回聚合结果以实现业务逻辑?

Oop 传递代理/策略与返回聚合结果以实现业务逻辑?,oop,interface,architecture,callback,delegates,Oop,Interface,Architecture,Callback,Delegates,有些方法必须处理特殊情况 例如,方法Print必须处理用户在打印过程中手动取消打印(canceled)或打印机缺纸(OutOfPaper)的情况 这些情况既没有错误也没有异常,因为它们是业务逻辑的一部分 我看到了方法实现的两种变体 备选案文1: public enum PrintResult Ok Canceled OutOfPaper end enum public function Print() as PrintResult end function 方法Pr

有些方法必须处理特殊情况

例如,方法
Print
必须处理用户在打印过程中手动取消打印(
canceled
)或打印机缺纸(
OutOfPaper
)的情况

这些情况既没有错误也没有异常,因为它们是业务逻辑的一部分

我看到了方法实现的两种变体

备选案文1:

public enum PrintResult
    Ok
    Canceled
    OutOfPaper
end enum

public function Print() as PrintResult

end function
方法
Print
有一个独特的结果类型
PrintResult
,其中包含方法执行期间发生的情况的报告

消费者调用方法
Print
,获取结果,分析结果并决定下一步做什么

备选案文2:

public Sub Print(CanceledAction as Action, OutOfPaperAction as Action)

end Sub
方法
Print
没有明确的结果类型,但在特殊情况下要做的行为通过回调/委托/接口传递给方法

调用方法
Print
时,消费者提供了在特殊情况下使用的方法

问题:

  • 还有其他变体吗
  • 何时使用每种变体更好

  • 我投票赞成返回结果。传递委托意味着该方法知道更多它应该知道的情况

    理想情况下,方法不应该知道某些操作甚至是可用的。它只是返回其状态。是否有任何行动可以做出反应?这不是它的业务