Как и к этому вопросу: C# Constructor Design, но этот вопрос немного отличается.C# Где загрузить исходные данные в объект?
У меня есть класс Customer и класс CustomerManager. Когда экземпляр создается из класса CustomerManager, я хочу загрузить всех клиентов. И здесь я застрял. Я могу сделать это несколькими способами:
- Загрузить все клиенты в конструкторе (мне не нравится этот, потому что это может занять некоторое время, если у меня есть много клиентов)
В каждом способе CustomerManager класс, который выполняет действия, связанные с базой данных, проверьте локальный список клиентов загружается и если нет, то загрузить список:
public method FindCustomer(int id) { if(_customers == null) // some code which will load the customers list }
Создайте метод, который загружает все клиенты. Этот метод должен вызываться перед вызовом метода, который выполняет базы данных, связанные с действиями:
В классе:
public LoadData() { // some code which will load the customers list }
В форме:
CustomerManager manager = new CustomerManager(); manager.LoadData(); Customer customer = manager.FindCustomer(int id);
Что такое лучший способ сделать это?
EDIT:
У меня есть ощущение, что я неправильно понял здесь. Возможно, это потому, что я был недостаточно ясен. В классе CustomerManager у меня есть несколько методов, которые зависят от локального списка (_customers). Итак, мой вопрос: где я должен заполнить этот список?
Когда вы сказали «форма», я считаю, что важно, имеете ли вы значение WebForm или WinForm; Я буду реализовывать их по-разному, потому что также задействовано кэширование. Итак, что вы имели в виду? – BeemerGuy
Я использую winforms – Martijn
Я думаю, вам нужно больше разработать (после вашего EDIT). Непонятно, почему ленивая загрузка не будет работать внутри вашего класса «CustomerManager», если вы меняете «_клиентов» на «ленивых» клиентов или «Lazy» и вместо этого ссылаетесь на '_customers.Value'. –