Frage

Meine Anwendung hat mit großen Datenmengen, übliche Auswahlgröße etwa 10000 Zeilen beschäftigen. Um die Leistung zu verbessern, ist es empfehlenswert, nur die Daten auszuwählen, benötigt wird.

Wenn ich Berechnungen zu tun habe oder ein sinnvolles Geschäft i komfortabel bin mit allen Daten, um die Auswahl meines Modell zu instanziiert richtig, so kann ich auf seiner Funktionalität verlassen.

Wenn nur Anzeigen von Daten (meist in einer Tabelle), ist dies nicht das, was ich will, ich will, um die Datenmenge auf das absolute Minimum abgerufen begrenzen.

Bisher habe ich den folgenden Ansatz verwendet, um Daten aus meiner Repositorys zu erhalten (siehe unten ist die Methode, die alle Magie tut innen das Repository:

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

Auf diese Weise habe ich die Typdefinition für den annonymous Typ in der Methode, die das Repository ruft, und ich kann mit dem Typ dort transparent arbeiten.

Jeder Controller definieren genau, welche Daten in die Ansicht zu übergeben, ist es sehr effizient, wie ich direkt die Reihenfolge der Spalten beeinflussen kann usw., ohne in der Ansicht mit dem Grid Control beschäftigen zu müssen, dass für mich zu tun. Ich brauche keine Loadoptions auf der Datacontext, weil es, dass aus Zahlen basierend auf dem Selektor.

Das Problem ist jetzt, dass ich nicht haben Kontrolle der Wähler, die zu meinem Repository.It geben wird aswell Methodenaufrufe enthalten usw., die nicht übersetzbar sind.

Meine Frage ist:

  1. Bisher i vermieden Viewmodel zu schaffen, weil ich Art Explosion fürchten. Was ist der beste Weg, um sie zu implementieren? Soll ich Selektoren zur Verfügung, die sie für mich die vorstehend?
  2. Sollte ich Unit-Tests schreiben, die nichts tun, überprüfen aber wenn die Abfrage ohne Ausnahme ausführt?
War es hilfreich?

Lösung

Ich würde Sie empfehlen Viewmodel erstellen, damit Sie mit einem bekannten Satz von Klassen arbeiten, Typ Explosion nicht wirklich ein Anliegen ist, sind da Sie derzeit anonyme Typen sowieso verwenden, das wahrscheinlich etwas schwieriger zu handhaben sind.

Wenn Sie (in der Regel) ein einzelnes Ansichtsmodell per View haben, dann wird es resonably sauber. In einigen Fällen können Sie sogar Ihre Viewmodel teilen, obwohl ich dagegen seit früher oder später würde empfehlen, einer des Verbrauchers landet mehr Daten / Felder benötigt, und die anderen Ende mit einem aufgeblähten Ansichtsmodell auf.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top