C# 返回错误消息vs抛出异常
我正在为asp.NETMVC项目编写类库。类库将返回实体并执行基本函数。在上一个项目中,我使用了如下逻辑:C# 返回错误消息vs抛出异常,c#,asp.net-mvc,error-handling,C#,Asp.net Mvc,Error Handling,我正在为asp.NETMVC项目编写类库。类库将返回实体并执行基本函数。在上一个项目中,我使用了如下逻辑: public class MyClassLibrary { public Response<ResponseMessage, MyEntity> GetMyEntity() { //Some code } public ResponseMessage SaveMyEntity(MyEntity e) {
public class MyClassLibrary
{
public Response<ResponseMessage, MyEntity> GetMyEntity()
{
//Some code
}
public ResponseMessage SaveMyEntity(MyEntity e)
{
//Some code
}
}
public class BaseController:Controller
{
public ActionResult JsonDataSourceRequest<T>(Func<Response<ResponseMessage, List<T>>> operation, [DataSourceRequest] DataSourceRequest request)
{
try
{
Response<ResponseMessage, List<T>> ret = operation();
if (ret.message.type == ReturnType.OK)
{
return Json(ret.result.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
else
return ConvertToJson(ret.message);
}
catch (Exception ex)
{
ResponseMessage m = new ResponseMessage();
m.type = ReturnType.ERROR;
m.text = ex.text;
return ConvertToJson(m);
}
}
public ActionResult PartialView<T>(Func<Response<ResponseMessage, T>> operation)
{
//Some code
}
public ActionResult Action(Func<ResponseMessage> operation)
{
//some code
}
}
[CustomAuthorize]
public class MyController : BaseController
{
public ActionResult MyEntityRead([DataSourceRequest] DataSourceRequest request)
{
return base.JsonDataSourceRequest(() =>
{
return MyEntityService.GetAll();
}, request);
}
}
公共类MyClassLibrary
{
公共响应GetMyEntity()
{
//一些代码
}
公共责任信息SaveMyEntity(MyEntity e)
{
//一些代码
}
}
公共类BaseController:控制器
{
public ActionResult JsonDataSourceRequest(Func操作,[DataSourceRequest]DataSourceRequest请求)
{
尝试
{
响应ret=操作();
if(ret.message.type==ReturnType.OK)
{
返回Json(ret.result.ToDataSourceResult(request),JsonRequestBehavior.AllowGet);
}
其他的
返回ConvertToJson(ret.message);
}
捕获(例外情况除外)
{
ResponseMessage m=新的ResponseMessage();
m、 type=ReturnType.ERROR;
m、 text=ex.text;
返回ConvertToJson(m);
}
}
公共行动结果部分视图(Func操作)
{
//一些代码
}
公共操作结果操作(Func操作)
{
//一些代码
}
}
[海关授权]
公共类MyController:BaseController
{
公共操作结果MyEntityRead([DataSourceRequest]DataSourceRequest请求)
{
返回base.JsonDataSourceRequest(()=>
{
返回MyEntityService.GetAll();
},请求);
}
}
在这里,为了使用BaseController的函数,我总是返回
回应
或
响应消息
现在我想我可以有自定义的异常类,而不是从所有方法返回ResponseMessage,我可以抛出这些异常
我不知道这是不是一个好的做法
提前谢谢
我不知道这是不是一种好的做法
不,抛出异常来处理非异常流是糟糕的设计。抛出异常是要付出代价的,如果您能够以正常流程处理您的案例,那么您应该避免抛出异常。如果出现异常,您应该抛出异常。如果某个条件是预期条件,则应使用返回值。只有您才能知道哪些适用于您的情况。“抛出异常,而不是返回错误代码 异常确保不会因为调用代码未检查返回代码而忽略故障。”
非常感谢nvoigt和@darin的快速响应。您认为与项目规则相关的错误是否属于例外情况。例如,抛出usercannotbeyonger18(“”);坏吗?我应该写一句格言,比如“处理一切可以处理的事情”?非常感谢您的快速回复。您认为与项目规则相关的错误是否属于例外情况。例如,抛出usercannotbeyonger18(“”);坏吗?我是否应该有一句格言,比如“处理一切可以处理的事情”?(我在这里重复上面的问题,因为stackoverlow只有一个额外的用户错误)如果您假设您的所有数据都是有效的,并且18岁以下的人是例外情况,因为它应该已经在其他地方处理过,那么抛出一个异常。如果你的检查是第一次检查这一点,那么我不认为有一部分人是例外。18岁以下的人是很正常的,你应该找到一个正常的流量控制方法来处理这个问题。我知道了,你的答案是清楚和令人满意的,非常感谢:)