Question

Mon application doit traiter de grandes quantités de données. La taille de sélection habituelle est d'environ 10000 lignes. Afin d’améliorer les performances, il est recommandé de sélectionner uniquement les données nécessaires.

Lorsque je dois effectuer des calculs ou des activités significatives, je suis à l'aise avec la sélection de toutes les données afin d'instancier correctement mon modèle afin que je puisse compter sur ses fonctionnalités.

Lorsque vous ne visualisez que des données (le plus souvent dans un tableau), ce n'est pas ce que je veux, je veux limiter la quantité de données récupérées au minimum absolu.

Jusqu'à présent, j'ai utilisé l'approche suivante pour obtenir des données de mes référentiels (la méthode ci-dessous illustre toute la magie du du référentiel:

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 cette façon, j’ai la définition du type de type annoncé dans la méthode qui appelle le référentiel et je peux travailler en transparence avec le type à cet endroit.

Chaque contrôleur peut définir exactement les données à transmettre à la vue, ce qui est très efficace car je peux directement influencer le classement des colonnes, etc. sans avoir à gérer le contrôle de grille dans la vue pour le faire à ma place. Je n’ai besoin d’aucune option LoadOption sur le DataContext, car elle est calculée en fonction du sélecteur.

Le problème, c’est que je n’ai pas le contrôle sur le sélecteur transmis à mon référentiel. Il peut également contenir des invocations de méthodes, etc. non traduisibles.

Ma question est la suivante:

  1. Jusqu'à présent, j'ai évité de créer ViewModels car je crains une explosion de type. Quelle est la meilleure façon de les mettre en œuvre? Dois-je mettre à disposition des sélecteurs qui font la projection pour moi?
  2. Dois-je écrire des tests unitaires qui ne vérifient rien si la requête est exécutée sans exception?
Était-ce utile?

La solution

Je vous recommanderais de créer ViewModels afin de travailler avec un ensemble connu de classes. L'explosion de type n'est pas un problème, car vous utilisez actuellement des types anonymes, ce qui est probablement un peu plus difficile à gérer.

Si vous avez (généralement) un seul ViewModel par vue, il devient alors propre. Dans certains cas, vous pouvez même partager vos ViewModels, bien que je le déconseille, car tôt ou tard l'un des consommateurs finit par avoir besoin de plus de données / champs et l'autre se retrouve avec un ViewModel gonflé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top