Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DDD:如何从应用程序服务返回验证错误?_C#_.net_Error Handling_Domain Driven Design - Fatal编程技术网

C# DDD:如何从应用程序服务返回验证错误?

C# DDD:如何从应用程序服务返回验证错误?,c#,.net,error-handling,domain-driven-design,C#,.net,Error Handling,Domain Driven Design,我正试图按照DDD的一些原则,在.NETCore中为特定需求构建一个小框架,我想知道从应用层到api层返回验证错误的标准模式是什么 我有两种方法: 强制所有应用程序服务方法返回固定结构(例如响应),并在此响应类中添加名为ValidationErrors的属性,并从应用程序层填充该属性 从应用层抛出业务验证异常(例如EntityNotFoundException),并从集中式中间件处理它们 就个人而言,我更喜欢第一种方法,但我需要你的建议 谢谢我不太喜欢第一种方法。您必须决定由谁负责确保方法的正确

我正试图按照DDD的一些原则,在.NETCore中为特定需求构建一个小框架,我想知道从应用层到api层返回验证错误的标准模式是什么

我有两种方法:

  • 强制所有应用程序服务方法返回固定结构(例如响应),并在此响应类中添加名为ValidationErrors的属性,并从应用程序层填充该属性
  • 从应用层抛出业务验证异常(例如EntityNotFoundException),并从集中式中间件处理它们
  • 就个人而言,我更喜欢第一种方法,但我需要你的建议


    谢谢

    我不太喜欢第一种方法。您必须决定由谁负责确保方法的正确输入。例如,您可以在方法中首先验证输入。如果输入无效,那么我认为您应该抛出ArgumentNullException或ArgumentException,然后稍后再处理它。API的正确响应应为状态代码400(错误请求)。使用ActionResult作为返回类型来返回这样的状态代码。 也可以通过中间件进行验证,您只需检查控制器中的模型状态。 我认为,如果您愿意,可以将模型验证与其他框架(如Fluent validation或类似框架)联系起来


    您也可以在控制器中或其他地方手动调用验证程序,并使用验证结果返回正确的http状态代码

    就个人而言,我发现由类型化异常控制的流执行比返回结果数据的旧技术(尤其是DDD)更具OOP性。这是否回答了您的问题?