【问题标题】:Is an emailExist method allowed in UserService?UserService 中是否允许使用 emailExist 方法?
【发布时间】:2014-07-17 07:16:46
【问题描述】:

我正在使用领域驱动设计。

我有以下模型(类):

  • 用户
  • 用户DAO
  • 用户存储库
  • 用户服务

我知道 UserService 应该包含所有相应的应用程序逻辑。所以我得到了像signUp()logIn()update()这样的方法。

我的signUp() 方法,注册用户,但在违反电子邮件唯一约束时抛出 PDO 异常。现在,由于异常仅适用于 exceptional 错误并且不利于控制流,我的问题是:

是否允许在 UserService 类中使用 emailExist() 方法?

所以我可以先在我的控制器中调用它(如果电子邮件已经存在,我可以报告表单错误),然后再实际注册用户。我知道这种方法实际上属于数据映射器,但由于它们不应该直接在控制器中使用,我考虑将它添加到我的 UserService 类中,然后从那里将它映射到我的存储库的 findByEmail() 方法。

【问题讨论】:

  • 不知道你从哪里得到异常仅用于“异常错误”的想法。在不使用 out 和 ref 参数的情况下,异常非常适合将与预期执行流程的任何偏差报告给调用者。您可以为您需要的任何回退方案指定细粒度的异常,并仅处理这些异常,重新抛出其他任何异常。而这个“其他”将是您的“异常错误”流程。

标签: php pdo domain-driven-design ddd-repositories ddd-service


【解决方案1】:

系统经常公开命令和查询。 SignUp、LogIn 和 Update 是命令。 FindByEmail 是一个查询。

用户界面可以尝试并指导用户编写有效的命令。检查 UI 中是否已经存在电子邮件可以为用户提供更好的反馈 - 允许他在发送命令之前更正命令。

一旦你尽力引导用户,你可以让你的命令抛出一个异常 - 而不是以一种干净的方式处理它,因为你能做到这一点的机会现在非常小。

【讨论】:

  • 很抱歉,您对我的问题的回答让我有点困惑。你是说没问题,还是..?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 1970-01-01
  • 2012-02-13
  • 2015-01-04
  • 1970-01-01
相关资源
最近更新 更多