Pergunta

Meu aplicativo tem de lidar com grandes quantidades de dados, selecione o tamanho usual é de cerca de 10.000 linhas. A fim de melhorar o desempenho é recomendado apenas para selecionar os dados necessários.

Quando eu tenho que fazer cálculos ou qualquer empresa significativa Estou confortável com a seleção de todos os dados, a fim de instanciar o meu modelo corretamente para que eu possa contar com a sua funcionalidade.

Quando apenas a visualização de dados (na maioria das vezes em uma tabela), este não é o que eu quero é, eu quero limitar a quantidade de dados recuperados para o mínimo absoluto.

Até agora eu usei a seguinte abordagem para obter dados de meus repositórios (mostrados abaixo é o método que faz toda a magia dentro do repositório:

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();
}

Assim eu tenho a definição do tipo para o tipo annonymous no método que chama o repositório e eu posso de forma transparente o trabalho com o tipo de lá.

Cada controlador pode definir exatamente quais dados para passar para a vista, que é muito eficiente como eu pode influenciar diretamente a ordem das colunas etc. sem ter que lidar com o Grid Control no Vista para fazer isso por mim. Eu não preciso de nenhum LoadOptions no DataContext porque calcula que fora baseado no selector.

O problema é agora, que eu não tenho controlar o selector que é passado para o meu Repository.It pode aswell conter chamadas de método, etc., que não são traduzíveis.

A minha pergunta é:

  1. Até agora, eu ter evitado para criar ViewModels porque temo tipo de explosão. Qual é a melhor maneira de implementá-las? Devo fazer seletores disponíveis que a projeção para mim?
  2. Devo escrever testes de unidade que fazer verificação nada, mas se executa a consulta sem exceção?
Foi útil?

Solução

Eu recomendo que você criar ViewModels que você está trabalhando com um conjunto conhecido de aulas, Tipo Explosion não é realmente uma preocupação, desde que você está usando atualmente tipos anônimos de qualquer maneira, que são, provavelmente, um pouco mais difícil de gerir.

Se você (geralmente) têm um único ViewModel per View, em seguida, torna-se resonably limpo. Em alguns casos, você pode até mesmo compartilhar seus ViewModels, embora eu recomendaria contra ele desde cedo ou mais tarde uma das extremidades consumidores precisando mais dados / campos e as outras extremidades com um ViewModel inchado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top