Tengo lo que podría ser visto como un híbrido extraño de IQueryable<T>
y IList<T>
colecciones de objetos de dominio pasados por mi pila de aplicaciones. Intento mantener la mayor cantidad posible de "consultas tardías" o "carga lenta". Hago esto de dos maneras:¿Cómo puedo simular o probar mi funcionalidad de evaluación/ejecución diferida?
- Mediante el uso de una capa de datos LinqToSql y pasando
IQueryable<T>
s a través de repositorios y para mi capa de aplicación. - Luego, después de que mi capa de aplicación pase
IList<T>
s, pero donde ciertos elementos en el gráfico de objeto/agregado son 'chained' with delegates para diferir su carga. A veces, incluso el contenido del delegado depende de las fuentesIQueryable<T>
y se inyecta elDataContext
.
Esto funciona para mí hasta ahora.
Lo que es extremadamente difícil es probar que este diseño realmente funciona. Es decir. Si derroto a la parte "floja" en alguna parte y mi evaluación/ejecución ocurre temprano, entonces todo es una pérdida de tiempo. Me gustaría poder TDD de alguna manera.
No sé mucho acerca de los delegados o la seguridad de la secuencia, ya que se aplica a los delegados que actúan en la misma fuente. Me gustaría poder burlarme del DataContext
y rastrear de alguna manera ambos métodos de aplazamiento (el SQL IQueryable<T>
y los delegados) la carga para que pueda tener pruebas que demuestren que ambas funciones funcionan en diferentes niveles/capas de la aplicación /apilar.
Como es crucial que la postergación funcione para que el diseño sea de algún valor, me gustaría ver que las pruebas fallen cuando rompo el diseño en un nivel dado (separado de la implementación en vivo). es posible?
Parece un comienzo. ¿Qué tal si tengo como 'LazyItem' que usa delegados para activar la evaluación del elemento encapsulado? http: // stackoverflow.com/questions/1669607/is-this-repository-pattern-efficient-with-linq-to-sql/1695561 # 1695561 –
@cottsak: Puede establecer que el delegado sea un delegado de interrupción (un delegado que genera una excepción). –
Suena como una buena idea. Tal vez estaba buscando una solución más compleja cuando no era necesario. –