Ähnlich zu dieser Frage: C# Constructor Design aber diese Frage ist geringfügig anders.C# Wo werden Anfangsdaten in einem Objekt geladen?
Ich habe eine Klasse Customer und eine Klasse CustomerManager. Wenn eine Instanz der CustomerManager-Klasse erstellt wird, möchte ich alle Kunden laden. Und hier blieb ich stecken. Ich kann dies mehrere Möglichkeiten:
- laden alle Kunden im Konstruktor (ich mag diese nicht, weil es eine Weile dauern kann, wenn ich viele Kunden habe)
In jedem Verfahren des Customer Klasse, die Datenbank im Zusammenhang Aktionen ausführt, überprüfen Sie die lokale Liste der Kunden geladen wird und wenn nicht, laden Sie die Liste:
public method FindCustomer(int id) { if(_customers == null) // some code which will load the customers list }
erstellen Sie eine Methode, die alle Kunden lädt. Diese Methode muss vor dem Aufruf von Methoden aufgerufen werden, die Datenbank im Zusammenhang Aktionen ausführt:
In der Klasse:
public LoadData() { // some code which will load the customers list }
In der Form:
CustomerManager manager = new CustomerManager(); manager.LoadData(); Customer customer = manager.FindCustomer(int id);
was den besten Weg ist, zu tun Dies?
EDIT:
Ich habe das Gefühl, dass ich hier falsch verstanden werde. Vielleicht liegt es daran, dass ich nicht klar genug war. In der CustomerManager-Klasse habe ich mehrere Methoden, die von der lokalen Liste (_customers) abhängt. Also, meine Frage ist, wo sollte ich diese Liste füllen?
Wenn Sie "Form" sagten, ich glaube, es spielt eine Rolle, ob Sie WebForm oder WinForm gemeint haben; Ich würde das jeweils anders implementieren, da auch Caching involviert ist. Also, welche meintest du? – BeemerGuy
Ich benutze Winforms – Martijn
Ich denke, Sie müssen mehr (nach Ihrem EDIT) erarbeiten. Es ist nicht klar, warum Lazy Loading nicht in Ihrer 'CustomerManager' Klasse funktioniert, solange Sie' _customers' zu den faulen 'Customers' oder zu' Lazy 'ändern und stattdessen intern auf' _customers.Value' verweisen. –