我最近一直在研究CQRS和Web API。我理解读写之间的区别,即查询和命令。我的问题是,我是否Web Api行为,例如[HttpGet]应该期望查询参数封装像(SortParam,Page,PageSize等...)的属性,或者应该/我可以将这些参数单独暴露并且然后创建一个Query对象并将其传递给处理程序?所以基本上应该怎么我的行动的样子:CQRS和WebAPI设计
public IHttpActionResult Get(Query query)
{
try
{
var result = _queryDispatcher.Dispatch<Query, QueryResult>(query);
return Ok(result);
}
catch (Exception)
{
return InternalServerError();
}
}
或者是确定的,如果它看起来像:
public IHttpActionResult Get(string sortBy = "id", int page = 1, int pageSize = maxPageSize)
{
try
{
var query = new Query { SortParam = sortby, Page = page, PageSize = pageSize };
var result = _queryDispatcher.Dispatch<Query, QueryResult>(query);
return Ok(result);
}
catch (Exception)
{
return InternalServerError();
}
}
这是见仁见智的问题进行处理。然而,我认为保持这些参数是单独暴露的,然后创建一个Query对象并沿处理器传递它是完全正确的。另外,如果目标是保持控制器精简,则不要处理操作中的错误,而是应用横切关注点并使其由异常过滤器处理。 – Nkosi