Pregunta

Mi aplicación tiene que tratar con grandes cantidades de datos, el tamaño de selección habitual es de aproximadamente 10000 filas. Para mejorar el rendimiento, solo se recomienda seleccionar los datos necesarios.

Cuando tengo que hacer cálculos o cualquier otro negocio significativo, me siento cómodo al seleccionar todos los datos para crear una instancia correcta de mi modelo y poder confiar en su funcionalidad.

Cuando solo veo datos (la mayoría de las veces en una tabla) no es lo que quiero, quiero limitar la cantidad de datos recuperados al mínimo absoluto.

Hasta ahora he usado el siguiente enfoque para obtener datos de mis repositorios (a continuación se muestra el método que hace toda la magia dentro del repositorio:

private IEnumerable<TResult> GetAllProject<TResult>(Expression<Func<T, TResult>> selector, Expression<Func<T, bool>> predicate)
{
    SetReadContext();
    var query = DataContex.Table<Order>().Where(predicate).Select(selector);

    return query.ToList();
}

De esa manera tengo la definición de tipo para el tipo anónimo en el método que invoca al repositorio y puedo trabajar de forma transparente con el tipo que se encuentra allí.

Cada controlador puede definir exactamente qué datos pasar a la vista, es muy eficiente ya que puedo influir directamente en el orden de las columnas, etc. sin tener que lidiar con el control de cuadrícula en la vista para hacerlo por mí. No necesito ninguna LoadOptions en el DataContext porque se da cuenta de eso en función del selector.

El problema ahora es que no tengo control sobre el selector que se pasa a mi Repositorio. También puede contener invocaciones de métodos, etc. que no sean traducibles.

Mi pregunta es:

  1. Hasta ahora, he evitado crear ViewModels porque temo una explosión de tipo. ¿Cuál es la mejor manera de implementarlas? ¿Debo poner a disposición selectores que hagan la proyección por mí?
  2. ¿Debo escribir pruebas unitarias que no verifiquen nada, pero si la consulta se ejecuta sin excepción?
¿Fue útil?

Solución

Le recomendaría crear ViewModels para trabajar con un conjunto conocido de clases. Type Explosion no es realmente una preocupación, ya que de todos modos actualmente está usando tipos anónimos, que probablemente sean un poco más difíciles de administrar.

Si (normalmente) tiene un único ViewModel por Vista, entonces se vuelve bastante limpio. En algunos casos, incluso puede compartir sus ViewModels, aunque recomendaría no hacerlo porque, tarde o temprano, uno de los consumidores terminará necesitando más datos / campos y el otro terminará con un ViewModel hinchado.

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