从业务逻辑或应用程序中返回错误的最佳方法是什么?

时间:2018-09-03 16:03:18

标签: oop laravel-5 design-patterns model-view-controller

我正在使用Laravel开发API。我正在编写业务逻辑和应用程序逻辑,并尽力将它们尽可能地分开。但是,我是这种概念的新手。例如,我有登录用户的逻辑。我必须检查:

  1. 给定的凭据是否有效?
  2. 系统中是否存在凭据?
  3. 用户是否处于活动状态
  4. 保存数据
  5. 尝试获取一些数据,但找不到
  6. 依此类推...

我不是在控制器中检查所有这一切(因为我认为这不是控制器的责任),而是在由控制器委托的单独的LoginFormProcessor类中进行检查。 如果所有检查都通过,则LoginFormProcessor将委派对象以将对象保存到数据库中或从数据库中获取对象。这是层次结构:

Controller -> LoginFormProcessor -> Repository

我想返回在LoginFormProcessorRepository中发生的详细JSON错误(如果有),但不是直接从这些类中返回(因为这不是他们的责任),而是从控制器中返回。

我如何将上述错误返回给Controller,以便Controller可以创建有意义的响应并发送给客户端。 我应该从LoginFormProcessorRepository返回一些整数类型的errorCode吗?但是随后,我将不得不检查所有可能的错误代码,这又是另一个麻烦。我认为这不是一个好习惯。

对此有任何建议和好的做法吗?

1 个答案:

答案 0 :(得分:1)

您希望业务逻辑和应用程序逻辑与交付机制无关,这意味着它们不应返回HttpCodes。相反,您应该使用异常(需要时自定义异常),将其捕获到表示层(控制器)中并进行相应的转换。

在使用Laravel标记问题时,您可以查看https://laravel.com/docs/5.6/errors#render-method,了解如何捕获异常并将其转换为HttpCodes。