C# 服务层-返回验证和;功能结果
我想知道从ASP.NET MVC中使用的服务层返回验证结果的最佳实践或任何建议 选择1C# 服务层-返回验证和;功能结果,c#,asp.net-mvc,service-layer,C#,Asp.net Mvc,Service Layer,我想知道从ASP.NET MVC中使用的服务层返回验证结果的最佳实践或任何建议 选择1 public IEnumberable Foo(int-userId,out-videoId) { var validationResults=新列表(); //验证逻辑在这里。。。 videoId=\u videoService.AddVideo(); 返回验证结果; } 选择2 公共服务结果Foo(int userId) { var validationResults=新列表(); var servic
public IEnumberable Foo(int-userId,out-videoId)
{
var validationResults=新列表();
//验证逻辑在这里。。。
videoId=\u videoService.AddVideo();
返回验证结果;
}
选择2
公共服务结果Foo(int userId)
{
var validationResults=新列表();
var servicesult=新servicesult();
//验证逻辑在这里。。。
serviceResult.ReturnObject=\u videoService.AddVideo();
serviceResult.ValidationResults=验证结果;
返回服务结果;
}
公共类服务结果
{
公共IEnumberable验证结果{get;set;}
公共对象ReturnObject{get;set;}
}
我目前正在做选项1,因为我认为选项2中的拳击和非拳击可能是一个难点。有什么想法吗?我会选择选项2。它看起来更干净。使用选项2,您的服务对于调用代码来说就像一个黑匣子。 它将使您能够在不影响服务层的情况下更改UI层
ServiceResult类中的属性“ReturnObject”不应该被称为“Result”吗?或者在方法Foo中,它应该是
servicesult.ReturnObject=\u videoService.AddVideo()
如果从服务层返回对象
,则必须在客户端代码中强制转换返回对象
适当的类型/值。因此,类型检查被定义为运行时,如果不小心,将导致InvalidCastException。更重要的是,这是一个不雅观的解决方案,它会污染代码,从而降低代码的可理解性
如果只希望有一种类型,可以使用泛型:
public class ServiceResult<T>
{
public IEnumberable<ValidationResult> ValidationResults { get; set; }
public T ResultObject
{
get;set;
}
}
公共类服务结果
{
公共IEnumberable验证结果{get;set;}
公共结果对象
{
获得;设置;
}
}
如果您不喜欢此解决方案,可以为每个服务方法定义结果类型
public class ResultBase
{
public IEnumerable<ValidationResult> ValidationResults { get; set; }
}
public class RegisterResult : ResultBase
{
public Video Video{get;set;}
}
公共类结果库
{
公共IEnumerable验证结果{get;set;}
}
公共类RegisterResult:ResultBase
{
公共视频{get;set;}
}
是的,关于我的ReturnObject,你是对的。我修复了这个问题,但是我仍然需要在调用层中转换为任何类型,在这个转换中,它将是一个int。你也可以在我的基础上扩展,更改影响服务层的UI层吗?我最终这样做了ServiceResult@Ryan代码严重错误,但我想你已经知道了。我已经修好了,你应该再检查一遍。
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;}
}