2014-02-16 73 views
2

我正在为asp.net mvc项目编写一个类库。类库将返回实体并执行基本功能。在以前的项目中,我用这样的逻辑:返回错误消息vs抛出异常

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); 
    } 
} 

在这里,为了使用BaseController的功能,我总是返回 响应 或 ResponseMessage

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

我不知道这是否是一种好的做法。

在此先感谢。

+0

非常感谢nvoigt和@darin的快速反应。你认为与项目规则有关的错误是否例外?例如, throw UserCannotBeYoungerThan18(“”); 不好? 我应该像“处理可以处理的每一个问题”这样的座右铭吗? – aldebaran

回答

4

我不知道这是不是好的做法。

不,抛出异常来处理非例外流是不好的设计。抛出异常需要付出代价,如果你能用正常流程处理你的情况,你应该避免它们。

5

如果有例外,你应该抛出异常。如果某件事情是预期的情况,你应该使用返回值。只有你可以知道你的情况适用。

+1

非常感谢您的快速响应。你认为与项目规则有关的错误是否例外?例如, throw UserCannotBeYoungerThan18(“”); 不好? 我应该像“处理可以处理的每一个问题”这样的座右铭吗? (我重复上面的问题,因为stackoverlow只有一个额外的用户错误) – aldebaran

+1

如果您认为所有的数据都是有效的,并且某个低于18的人是例外情况,因为它应该已经在其他地方处理过了,然后抛出异常。如果你的支票是第一个检查这个的实例,那么我认为这个民众不是很好的例子。有人低于18岁是正常的,你应该找到一个正常的流量控制方式来处理这个问题。 – nvoigt

+0

我已经明白了,你的回答很清楚,很满意,非常感谢:) – aldebaran