在我的项目中,我有一个操作存储库的服务层。服务层由我的控制器调用。
在许多情况下,我的控制器层能够在进入系统之前验证传入信息。但是,在某些情况下,由于提交的数据无效,可能会出现错误,但仅限于我的服务层内的某个点。
考虑到这一点,我们假设我正在进行用户注册流程:
这意味着生成(如果需要)和检查重复用户名的过程在服务层中发生。
如果出现重复,那么我向呼叫者发出信号的最多分离和理想的方式(无论是控制器,后台任务,还是其他服务) - :
理想情况下,建议的方法可以应用于其他服务中发生的错误,以便我能够提出一致的报告方式,从而处理调用层中的错误。
答案 0 :(得分:2)
我通常做的是,让业务/域/应用程序层都抛出常规的.NET异常(保持堆栈跟踪!),其中包含有关异常内容的信息。
在服务层中,全局异常处理程序然后将异常转换为错误(在WCF服务的情况下)。它还可以记录当时的内部结构。
所以内部(例外)保留在内部;但它的公共部分会自动暴露给您服务的消费者。
通常我使用FluentValidation
在应用程序和业务层中进行验证,这允许您将验证放在特定的验证类中并重用它们。
答案 1 :(得分:1)
我喜欢@ L-Three的答案,但我想提供另一种建议:将验证错误作为服务层方法返回结果的一部分。
我的感觉是域/服务层应该负责所有验证,并且在UI中完成的任何输入验证都是很好的。