返回错误消息vs throw异常

ald*_*ran 2 c# error-handling asp.net-mvc

我正在为asp.net mvc项目编写一个类库.类库将返回实体并执行基本功能.在之前的项目中,我使用了这样的逻辑:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这里为了使用BaseController的函数,我总是返回Response或ResponseMessage

现在我认为我可以拥有自定义异常类,而不是从我可以抛出这些异常的所有方法返回ResponseMessage.

我想知道这是不是一个好习惯.

提前致谢.

nvo*_*igt 6

如果有特殊情况,你应该抛出异常.如果某些事情是预期的情况,则应使用返回值.只有你知道哪种情况适用于你的情况.


Dar*_*rov 5

我想知道这是否是一个好习惯。

不,抛出异常以处理非异常流是不好的设计。抛出异常是有代价的,如果可以按正常流程处理案件,则应避免使用它们。