¿Qué opinas? ¿Debería tu DAO devolver un IQueryable para usarlo en tus controladores?ASP MVC: ¿Deberían los servicios devolver IQueryable's?
Respuesta
Por el momento, suena atractivo, pero really isn't.
No. Sus controladores no deben manejar ninguna lógica compleja en absoluto. Mantenlos delgados; el Modelo (no DAO) debe devolver al Controlador todo lo que necesita para pasar a la Vista.
Ver consultas (o incluso consultas) en una clase de controlador es algo que consideraría un olor a código.
Gracias Aaron, Buen punto. Sin embargo, hay algunas ventajas de usar IQueryable, como la flexibilidad y la facilidad de mantenimiento de los servicios, ya que la interfaz DAO crecerá menos utilizando el patrón de tuberías y filtros. ¿qué opinas? – SDReyes
El código de espagueti siempre * parece * más fácil de mantener cuando un proyecto es joven y pequeño; A medida que el proyecto crezca, sin embargo, comenzará a lamentar no tener una clara separación de preocupaciones. – Aaronaught
Pasar su IQueryable
Si sigue el paradigma de "modelos de grasa, controladores delgados", entonces no.
Ver este artículo en el Fat Controller anti-pattern.
Gracias Robert. :) – SDReyes
Me encanta pasar IQueryable en mis controladores porque no tengo que crear métodos de paginación y clasificación cojos en cada método DAO e interfaz a lo largo de la vida útil del desarrollo de mis aplicaciones.
GetCustomersByLastname(string lastname)
se convierte rápidamente en
GetCustomersByLastname(string lastname, string sortcolumn, int pagesize, int page)
Una y otra vez y otra vez y otra vez. ¡Bleck!
Con IQueryable puede implementar la paginación y la ordenación de forma ortogonal, como aprovechar el proyecto IPagedList. La devolución de IQueryable también le brinda acceso fácil al objeto total .Count() sin más perversión de su capa de datos.
@Robert s argumento de IQueryable es igual a los controladores de grasa es muy inestable. Un controlador de grasa sería similar a las páginas hinchadas .aspx.cs de antaño. Si todo lo que hace es conectarse a su DAL y luego enviar los resultados de su no ganar "gordura" de su técnica de consulta, lo obtiene de meter mucha lógica dentro de una sola clase. Usted no obtiene un Controlador de Grasa debido a sus métodos de acceso a los datos, a menos que empiece a rodar el registro, las notificaciones y otras preocupaciones ortogonales dentro.
public ActionResult Detail(string searchTerm)
{
var model = MyDAL.MyObjects(searchTerm);
}
vs:
public ActionResult Detail(string searchTerm)
{
var model = MyDAL.MyObjects.Where(x => x.Name == searchTerm);
}
no veo una diferencia de peso.
@La respuesta de Mark Seemann es igualmente inestable. Claro, puede cambiar toda su capa de datos en el medio de un proyecto, pero eso será un desastre complejo sin importar cuán abstraído se encuentre. El ejemplo que usa es cambiar de Linq2Sql al almacenamiento de tablas de Windows Azure. RDBMS a la tienda Key/Value? Y el punto de dolor es la implementación de su repositorio? Pasar de RDBMS a una tienda Key/Value va a ser una locura que va a ser horrible sin importar qué.
Mark también muestra el Dominio de diseño en su argumento. Es ese el tipo de sistema tu edificio. ¿Hay suficiente "Dominio" en lugar de escenarios CRUD puros que hacen que este enfoque sea valioso? Si no, ¿por qué molestarse?
El uso de LINQ y la interfaz IQueryable le proporciona menos dificultades para cambiar capas de datos de todos modos. Si su cambio entre ORM que admiten LINQ e IQueryableProvider (creo que ese es el nombre) que solo el código de abajo se preocupa por ese cambio. Sus controladores se mantendrían igual cambiando desde la mayoría de los ORM en el mercado ahora.
Si el propósito de esto es la clasificación y paginación, esto se puede lograr fácilmente con una interfaz 'IPager
También tenga en cuenta que cualquier búsqueda hecha usando 'IQueryable
@Aaronaught Me refiero al diseño impulsado por el dominio. El modelo de dominio para mí significa que alguien está usando una técnica DDD para construir su aplicación. Estaba señalando que Roberts vinculó a los defensores de las respuestas a hacer algo por el bien de DDD. Si no está utilizando DDD, algunas de las razones para devolver IEnumerable
- 1. cómo devolver estructura JSON en ASP MVC
- 2. Asp Mvc Devolver una vista parcial con Ajax no funciona
- 3. ¿Deberían los controladores de una aplicación web ASP.NET MVC solicitar repositorios, servicios o ambos?
- 4. ASP.NET MVC: ¿Deberían los Controladores llamados por AJAX devolver JSON o rendir html?
- 5. Multi inquilino en ASP MVC
- 6. ASP MVC Areas y ActionLink
- 7. ASP clásico en ASP.NET MVC (C#)
- 8. Asp.Net MVC y servicios web
- 9. ASP.NET MVC y servicios web
- 10. ¿Los servicios web estándar (asmx) funcionan con MVC?
- 11. Llamar a servicios web REST desde una página asp clásica
- 12. ASP MVC ChildAction Solo debe tener el enrutamiento
- 13. ¿Existen convenciones de nomenclatura para ASP .NET MVC 3?
- 14. ¿Deberían los constructores de Servicios WCF usar fallas para el manejo de errores?
- 15. ¿Puedo eliminar ASP .NET MVC 2 de Visual Studio si utilizo ASP .NET MVC 3?
- 16. ASP> net MVC parciales reutilizables
- 17. ASP MVC HTML Helpers - ¿Bueno o malo?
- 18. ASP .NET MVC correcta UserControl arquitectura
- 19. unidad de prueba asp mvc view
- 20. ASP MVC: ¿Cuándo se llama IController Dispose()?
- 21. ASP.NET MVC JsonResult devolver 500
- 22. Servicios RIA frente a los servicios WCF
- 23. ¿No deberían los rails find_by_ methods devolver una matriz vacía en lugar de nil?
- 24. Servicios RESTful: WCF versus ASP.NET MVC
- 25. asp .net mvc OnResultExecuting modify filterContext Resultado
- 26. Patrón de controlador ASP MVC Ajax?
- 27. Problema de enrutamiento ASP MVC con IIS7
- 28. Asp MVC Enlace de acción url absoluta
- 29. ASP MVC FILE Upload HttpPostedFileBase es Null
- 30. Manejo de errores personalizados en ASP MVC
Gracias:) Niza hilo – SDReyes