服务层-返回验证&功能的结果

本文关键字:功能 结果 验证 返回 服务 | 更新日期: 2023-09-27 18:08:03

我想知道从服务层返回验证结果的最佳实践或任何建议,这将在ASP中使用。净MVC。

<标题>选项1
public IEnumberable<ValidationResult> Foo(int userId, out videoId)
{
    var validationResults = new List<ValidationResult>();
    // Validation logic goes here...
    videoId = _videoService.AddVideo();
    return validationResults;
}
<标题>选项2 h1> 目前正在做选项1,因为我认为选项2中的装箱和拆箱可能是一个痛点。什么好主意吗?

服务层-返回验证&功能的结果

如果从您的服务层返回object,您必须在客户端代码中转换returnobject适当的类型/值。因此,类型检查与运行时不同,如果不小心会导致invalidcastexception。更重要的是,它是一个不优雅的解决方案,它会污染你的代码,从而降低代码的可理解性。

如果你只想要一个类型,你可以使用泛型:

public class ServiceResult<T>
{
    public IEnumberable<ValidationResult> ValidationResults { get; set; }
    public T ResultObject
    {
      get;set;
    }
}

如果你不喜欢这个解决方案,你可以为每个服务方法定义一个结果类型。

public class ResultBase
{
    public IEnumerable<ValidationResult> ValidationResults { get; set; }
}
public class RegisterResult : ResultBase
{
    public Video Video{get;set;}
}

我选择选项2。它看起来更干净。使用选项2,您的服务对调用代码来说就像一个黑匣子。它将使您能够在不影响服务层的情况下更改UI层。

ServiceResult类中的属性' returnbject '不应该称为'Result'吗?或者在方法Foo中,应该是serviceResult.ReturnObject = _videoService.AddVideo();