【问题标题】:Communicating input & processing errors from service layers从服务层传达输入和处理错误
【发布时间】:2014-08-12 15:34:44
【问题描述】:

在我的项目中,我有一个操作存储库的服务层。服务层由我的控制器调用。

在许多情况下,我的控制器层能够在传入信息进一步进入系统之前对其进行验证。然而,在某些情况下,由于提交的数据无效,但仅在我的服务层内的某个点,可能会出现错误。

考虑到这一点,假设我正在执行用户注册流程:

  • 不允许使用重复的用户名
  • 可以提供用户名
    • 如果没有提供用户名,则根据名字和姓氏生成

这意味着生成(如有必要)和检查重复用户名的过程在服务层进行。

如果出现重复,我向调用者(无论是控制器、后台任务还是其他服务)发回信号的最解耦和最理想的方式是什么?

  • 用户名字段有问题
  • 如果适用,生成的用户名

理想情况下,建议的方法能够应用于其他服务中发生的错误,以便我可以提出一致的方式来报告并处理调用层中的错误。

【问题讨论】:

    标签: architecture service-layer decoupling onion-architecture


    【解决方案1】:

    我通常做的是让业务/域/应用程序层都抛出常规的 .NET 异常(保持堆栈跟踪!),其中包含有关异常的信息。

    在服务层中,全局异常处理程序将异常转换为故障(在 WCF 服务的情况下)。它还可以记录当时的内部情况。

    所以内部(例外)被保存在内部;但它的公共部分会自动暴露给您的服务的消费者。

    我通常使用FluentValidation 在应用程序层和业务层进行验证,这样您就可以将验证放在特定的验证类中并重用它们。

    【讨论】:

      【解决方案2】:

      我喜欢@L-Three 的回答,但我想提供一个替代建议:将验证错误作为服务层方法返回结果的一部分。

      我的感觉是域/服务层应该负责所有验证,并且在 UI 中完成的任何输入验证都很好。

      【讨论】:

        猜你喜欢
        • 2011-07-10
        • 2015-02-21
        • 2019-06-14
        • 1970-01-01
        • 2019-05-13
        • 2011-03-14
        • 2019-11-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多