Pregunta

He estado mirando el escaparate de MVC y veo que IQueryable se devuelve desde las clases del repositorio. ¿Se pregunta si no está utilizando LINQ tiene sentido devolver ese objeto? En el caso de LINQ, tiene sentido debido a la ejecución diferida, por lo que agregar filtrado en la capa de servicio tiene sentido, pero si no usa LINQ, en muchos casos querrá filtrar en la base de datos. En este caso, ¿agregaría métodos que filtran al repositorio? Si lo hago, ¿es realmente útil la capa de servicio?

¿Fue útil?

Solución

Los argumentos se pueden hacer de cualquier manera, vea esta publicación reciente del blog: ¿Debería mi repositorio exponer IQueryable?

Otros consejos

Las cosas IQueryable que Rob Conery puso en MVC Storefront son innovadoras, pero de ninguna manera son la norma cuando se trata de crear repositorios. Por lo general, un repositorio es responsable de asignar su dominio hacia y desde la base de datos. La devolución de IQueryable realmente no realiza ningún mapeo y se basa en la capa de servicios para hacerlo. Esto tiene sus ventajas y desventajas, pero basta con decir que no es la única forma de hacerlo.

Sin embargo, notará que sus servicios terminan siendo un poco malolientes debido a todo el código duplicado. Por ejemplo, si solo desea obtener una lista de todos los usuarios de su base de datos, tendría que definir esa función tanto en el repositorio como en la capa de servicio. Sin embargo, cuando la capa de servicio brilla es cuando se necesitan múltiples transacciones hacia / desde la base de datos para una operación.

El problema que tengo al exponer IQueryable a la capa de servicio es que si alguna vez quisiste envolver la capa del repositorio detrás de un servicio web sin romper el código de la capa de servicio, no podrías hacerlo, no sin usar ADO.NET Data Services pero todo el código de su Repositorio se volvería esencialmente redundante.

Si bien creo que puede ser bastante productivo para aplicaciones pequeñas, cuando comienzas a mirar la escala y la distribución, hace más mal que bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top