Ich habe, was könnte als eine bizarre Hybrid von IQueryable<T>
und IList<T>
Sammlungen von Domain-Objekten gesehen, die meine Anwendung Stapel weitergegeben. Ich versuche, so viel wie möglich von der "späten Abfrage" oder "Lazy Loading" zu erhalten. Ich tue dies auf zwei Arten:Wie kann ich meine verzögerte Evaluierungs-/Ausführungsfunktionalität nachahmen oder testen?
- Durch eine LinqToSql Datenschicht unter Verwendung und Weitergabe
IQueryable<T>
s von Repositorys durch und meine App Schicht. - Dann nach meiner App Ebene
IList<T>
s übergeben, aber wo bestimmte Elemente in der Objekt/Aggregat-Grafik sind 'chained' with delegates, so dass ihre Belastung zu verschieben. Manchmal sind sogar die Delegierteninhalte aufIQueryable<T>
Quellen angewiesen und dieDataContext
sind injiziert.
Das funktioniert für mich bisher.
Was blendend schwierig ist, beweist, dass dieses Design tatsächlich funktioniert. Ie. Wenn ich irgendwo den "faulen" Teil besiege und meine Bewertung/Ausführung früh stattfindet, dann ist das Ganze eine Zeitverschwendung. Ich würde das gerne irgendwie tun können.
Ich weiß nicht viel über Delegierte oder Thread-Sicherheit, da es für Delegierte gilt, die auf der gleichen Quelle handeln. Ich möchte in der Lage sein, die DataContext
zu verspotten und irgendwie verfolgen beide Methoden der Verschiebung (IQueryable<T>
's SQL und die Delegierten) das Laden, so dass ich Tests haben kann, die beweisen, dass beide Funktionen auf verschiedenen Ebenen/Ebenen der App arbeiten /Stapel.
Da es entscheidend ist, dass die Verschiebung für das Design von Wert ist, würde ich gerne sehen Tests fehlschlagen, wenn ich das Design auf einer bestimmten Ebene (getrennt von der Live-Implementierung) zu brechen. Ist das möglich?
Klingt wie ein Anfang. Wie wäre es, wenn ich ein 'LazyItem' habe, das Delegaten verwendet, um die Evaluierung des gekapselten Elements auszulösen? http: // Stapelüberlauf.com/questions/1669607/is-this-repository-pattern-effizient-mit-linq-to-sql/1695561 # 1695561 –
@cottsak: Sie können den Delegaten als brechenden Delegaten festlegen (einen Delegaten, der eine Ausnahme auslöst). –
Klingt nach einer guten Idee. Vielleicht war ich nach einer komplexeren Lösung, wenn es nicht notwendig war. –