【发布时间】:2010-10-27 08:03:45
【问题描述】:
为了避免 Tell-don't-ask,我想将我在调用方法之前询问的 bool 属性组合成一个返回 bool 的新方法。
我尝试遵循这个模式,如果一个方法不能执行它的名字所暗示的动作,它会抛出一个异常。比如SendMail不能发送邮件,就会抛出异常。
我希望这个特定的方法返回一个布尔值来表示成功。并且正在考虑是否应该将名称更改为 TrySendMail 之类的名称,也许查看具有 bool 返回类型的方法签名就足够了?
【问题讨论】:
-
应该没问题。就我个人而言,我什至不会打扰。 bool 返回类型的存在有点暗示成功/失败。
-
您可以通过返回某种错误代码 Enum 使其更明确,例如:BlockedBySender、InvalidAddress 等...在这种情况下,Try 将是多余的
-
如今,使用错误代码作为返回值已不受欢迎。如果函数失败,则抛出强类型异常。如果他想知道这类事情,TryWhatever 模式在这种情况下是不合适的。
-
@Mike:你可能想读这个:blogs.msdn.com/b/oldnewthing/archive/2005/01/14/352949.aspx我不确定你和什么人一起玩,但我认为故意抛出异常是不好的。
-
@Chris Lively:我的理解是,如果 (1) 这样做有意义,(2) 您对条件使用最相关的异常,抛出异常并不是一个坏主意手头,和(3)它有据可查。如果值无效,您不会在属性设置器中抛出异常吗?