No estoy muy familiarizado con el patrón MVC. ¿Podría decirme cuál de las siguientes tres acciones de controlador es mejor? Gracias :)¿Es una buena práctica tener consulta de linq en Controladores?
(1) Tener consulta en acción:
public ActionResult List()
{
var query = repository.Query().Where(it => it.IsHandled).OrderBy(it => it.Id);
// ...
}
(2) Tener consulta en el servicio:
public ActionResult List()
{
var items = service.GetHandledItemsOrderById();
// ...
}
(3) tiene orden por la acción :
public ActionResult List()
{
var items = service.GetHandledItems().OrderBy(it => it.Id);
// ...
}
Si elegimos (1), entonces tenemos demasiada lógica comercial en el controlador?
Si elegimos (2), puede haber muchos métodos de servicio como GetXXXByYYY()
.
Si elegimos (3), por la que encapsulamos Where(it => it.IsHandled)
pero no
OrderBy(it => it.Id
.
¿Alguna idea?
Gracias. Bu si "GetHandledItems()" devuelve una colección (no IQueryable), no podemos realizar proyecciones en la consulta. Afectará el rendimiento. –
@Dylan: haga sus proyecciones en el servicio antes de ejecutar la consulta, ya sea en línea o mediante otro método de conexión, por ejemplo: 'return repo.Query(). WhereHandled(). WithOrdering(). AsSomeProjectedType()' – RPM1984
También vea esta ** brillante ** vid RobCon en MVC Pipes & Filters: http://www.asp.net/mvc/videos/aspnet-mvc-storefront-part-3-pipes-and-filters – RPM1984