有些方法必须处理特殊情况。
例如,方法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提供的方法是特殊情况。
问题:
答案 0 :(得分:0)
我投票支持返回结果。传递代理意味着该方法更多地了解它应该的情况。
理想情况下,方法不应该知道某些操作甚至可用。它只是返回它的状态。是否有任何行动可以作出反应或不是它的商业。