Similar a esta pregunta: C# Constructor Design pero esta pregunta es levemente diferente.C# ¿Dónde cargar datos iniciales en un objeto?
Tengo un cliente de clase y un CustomerManager clase. Cuando se crea una instancia de la clase CustomerManager, quiero cargar todos los clientes. Y aquí es donde me quedé atrapado. Puedo hacer esto varias maneras:
- cargar todos los clientes en el constructor (no me gusta éste, ya que puede tomar un tiempo si tengo muchos clientes)
En todos los métodos de la CustomerManager clase que lleva a cabo acciones relacionadas con bases de datos, comprobar la lista local de los clientes se carga y si no, se carga la lista:
public method FindCustomer(int id) { if(_customers == null) // some code which will load the customers list }
crear un método que carga todos los clientes. Este método debe ser llamado antes de llamar a métodos que lleva a cabo acciones relacionadas con bases de datos:
En la clase:
public LoadData() { // some code which will load the customers list }
En la forma:
CustomerManager manager = new CustomerManager(); manager.LoadData(); Customer customer = manager.FindCustomer(int id);
¿Cuál es la mejor manera de hacerlo ¿esta?
EDIT:
tengo la sensación de que estoy aquí entendido mal. Tal vez es porque no estaba lo suficientemente claro. En la clase CustomerManager tengo varios métodos que dependen de la lista local (_customers). Entonces, mi pregunta es, ¿dónde debería llenar esa lista?
Cuando dijo "formulario", creo que importa si se refería a WebForm o WinForm; Implementaría cada uno de manera diferente, porque el almacenamiento en caché también está involucrado. Entonces, ¿a qué te refieres? – BeemerGuy
Estoy usando winforms – Martijn
Creo que necesita elaborar más (después de su EDIT). No está claro por qué la carga diferida no funcionará dentro de su clase 'CustomerManager', siempre que cambie' _customers' por 'Lazy' Customers' o 'Lazy' y en su lugar se refiera a '_customers.Value'. –