传递委托/策略vs返回聚合结果以实现业务逻辑?

时间:2015-05-09 12:09:17

标签: oop interface architecture callback delegates

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

例如,方法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时,consumer提供的方法是特殊情况。

问题:

  1. 还有其他变种吗?
  2. 何时使用每个变体更好?

1 个答案:

答案 0 :(得分:0)

我投票支持返回结果。传递代理意味着该方法更多地了解它应该的情况。

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