我已经参与了几个MVC项目,几乎所有项目中我都看到了类似的逻辑。
我们经常返回这样的对象:
public class HttpPrjNameResult<T> {
public PrjNameStatus Status { get; set; }
public string Message { get; set; }
public T data{ get; set; }
}
所以我想知道:
是否有任何标准的MVC功能?
如果不是 - 为什么?
或者我可能使用错误的模式来编写代码?
UDPATE: 我会稍微更新一下问题。 让我们说我用方法UpdateReports创建web api,它返回更新实体的列表:
public HttpTestResult<List<Report>> UpdateReports(IEnumerable<Reports> reports){
try{
var res = SaveReports(reports);
return new HttpTestResult<List<Report>>{
Status = TestStatus.Success,
Data = res
}
}
catch(Exception e){
logger.Error(e);
return new HttpTestResult<Object>{
Status = TestStatus.Error,
Message = "Error while saving reports"
}
}
}
我认为这样的逻辑在整个项目中都很有用,我想更多的是API风格,而不是纯粹的mvc,但仍然如此。 问题是 - 我做错了什么,所以这是一种重新发明的轮子,并且已经内置了这种逻辑的功能
答案 0 :(得分:0)
如果我理解你的问题,你会问你如何根据你是否遇到异常来返回成功或失败结果?
您可能希望查看IExceptionFilter(MVC)或IExceptionFilter(Http)界面。这些过滤器将监听任何异常,并执行您定义的一些自定义操作,例如(MVC示例):
public void OnException(ExceptionContext filterContext)
{
//perform some custom action, e.g. logging
_logger.Log(filterContext.Exception);
//return a particular status
filterContext.Result = new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
如果您使用异常过滤器来处理发生的任何异常,您的控制器可以专注于仅作为控制器:
[ResponseType(typeof (List<Report>))]
public IHttpActionResult UpdateReports(IEnumerable<Reports> reports)
{
var results = SaveReports(reports).ToList();
return Ok(results);
}
答案 1 :(得分:-1)
据我所知,你基本上在寻找Command pattern。
有一个good article可以帮助您了解实现它的方法之一。我不能说这是最好的做法,但你可以从中得到一些想法。
主要思想是创建ICommandHandler
和ICommandDispatcher
接口,帮助您将基本逻辑放在一个位置。