cfthrow这是你怎么用的?(来自Adobe的doc)

jfr*_*how 0 coldfusion exception

我读了cfthrow文档,来到这个防空火炮

何时使用cfthrow标签

当您的应用程序可以识别并处理特定于应用程序的错误时,请使用cfthrow标记.cfthrow标签的一个典型用途是实现自定义数据验证.cfthrow标记对于将错误从自定义标记页面抛出到调用页面也很有用.

例如,在用于设置密码的表单操作页面或自定义标记上,应用程序可以确定输入的密码是否为最小长度,或者包含字母和数字,并使用指示密码规则的消息抛出错误坏了.cfcatch块处理错误并告诉用户如何纠正问题.

我这一次做错了还是这只是一个可怕的用例?

我被告知异常不应该用于处理常规应用程序流程,而是用于有些超出您控制范围的内容.例如,当您写入文件时,文件被锁定.

破坏密码规则的用户听起来并不像是你无法控制的东西.

bay*_*ezy 5

这是一个糟糕的例子,而不是一个糟糕的用例.我个人会将参数传递给验证函数,并返回包含pass或fail的结果以及要显示给用户的失败消息集合.

我如何使用例外如下.

在功能内.假设你有一个函数,你从数据库中获取一些数据,然后你从它构建一个结构.如果返回的查询没有值,您有几个选项: -

  1. 您可以返回一个空结构,并让调用代码从结构为空的事实中推断出问题.这并不理想,因为应用程序必须具有复杂的逻辑来处理丢失的数据.

  2. 您可以返回一个更复杂的数据类型,其中一个属性是进程是否正常以及实际数据.同样,这不是最佳的,因为当您有大部分时间拥有数据并且您的应用程序再次处理此问题时,您必须在每次调用时都访问该属性.

  3. 或者您可以使用cfthrow引发自定义异常,指示没有匹配的记录.这意味着您可以选择忽略发生此错误的前景并让它冒泡到onError处理程序,或者您可以将其包围在try catch语句中并在那里处理它.这可以保持您的API清洁和明智.

包装外部错误让我们说您使用cfhttp通过https连接到外部API.现在这需要在您的密钥库中安装证书,否则会引发错误.如果此证书更新,则它将再次开始出错.在这个实例中,我将把调用包装在try catch中,如果这是错误,我将在我自己的自定义异常中包装它,并在消息中详细说明我们需要更新密钥库中的cert,以便任何开发人员调试它知道该怎么做做到修复它而不必解决它.如果不是那个特定的错误,那么我会反正它,以便它起泡并由调用之上的任何异常处理逻辑处理.

这些只是几个例子,但还有更多.总而言之,我会说,抛出异常是一种通过应用程序层进行通信的方式,当某些事情发生时,这不是所希望的行为,同时保持您的API /应用程序逻辑清洁和易懂.