Exception 我应该使用自定义异常来控制应用程序流吗?

Exception 我应该使用自定义异常来控制应用程序流吗?,exception,Exception,使用自定义业务异常(例如BusinessRuleViolationException)来控制用户错误/用户错误输入流是否是一种好的做法 经典方法: 我有一个web服务,其中我有两个方法,一个是“checker”(usernameareadyexists()),另一个是“creator”(CreateUsername())。。。 因此,如果我想创建一个用户名,我必须对webservice进行两次往返,1.检查,2.如果检查正常,则创建 使用用户名ReadyExistsException怎么样?所以

使用自定义业务异常(例如BusinessRuleViolationException)来控制用户错误/用户错误输入流是否是一种好的做法

经典方法: 我有一个web服务,其中我有两个方法,一个是“checker”(usernameareadyexists()),另一个是“creator”(CreateUsername())。。。 因此,如果我想创建一个用户名,我必须对webservice进行两次往返,1.检查,2.如果检查正常,则创建

使用用户名ReadyExistsException怎么样?所以我只叫2。web服务方法(CrateUsername()),其中包含检查,如果未成功,则抛出UserNameReadyExistsException。 因此,最终目标是只对web服务进行一次往返,并且检查也可以包含在其他web服务方法中(因此我避免一直调用usernameAreadyExists()。
此外,我可以对其他web服务调用使用这种业务错误处理,完全避免调用前的检查。

使用异常管理应用程序流是一个坏主意。如果你认为你可以检查一些东西,那么就拿输出来决定。与其让被调用的方法抛出异常并由调用方决定如何处理异常,不如让被调用的方法返回一个状态,并让调用方根据状态值决定流程。

有些人这样做,而且他们非常擅长开发。 有时,对于开发人员来说,抛出异常而不是链接返回值更容易、更快

但必须考虑到,抛出异常并不便宜。堆栈跟踪等功能很大,大量使用会影响性能

我认为有时候在非常必要的时候使用异常是可以的,但它不应该是控制流的主要方式。
只有我的2/100。这不是应用程序控制流,而是用户错误(不是内部错误/异常)2。我忘了补充一点,这些业务异常是由客户机/消费者以一种很好的方式处理的(异常包装为一个错误对象,具有良好的、用户友好的描述,如果您使用异常只是为了通知用户系统中的异常(不是由于系统的内部错误)然后,使用自定义异常是一种常规做法。因此,在这种情况下,您可以使用自定义异常类。异常不用于控制流,而是用于特殊情况。如果您获得UserAlreadyExistsException这一事实意味着您的系统已损坏或业务用例出错,那么这是可以的,但需要请检查是否可以创建用户。这是非常错误的。我发现了一些资源,可能有助于您理解异常: