2008-12-12 3 views
1

У меня есть коллекция заказов. Я хотел бы ударить по базе данных один раз, получить заказы, сохранить их, а затем получить доступ к этой коллекции через несколько форм. Я знаю в asp.net, вы можете использовать такие вещи, как Application Object или Session Object, но как вы это делаете в приложении для формы выигрыша? Я думал о создании статической коллекции, доступ к которой можно получить через несколько форм, классов или где угодно. Звучит ли это правильно, и это даже возможно?Хороший способ растянуть объект по нескольким классам

благодарит

ответ

1

Основополагающее различие в WebForms & WinForms - это то, что WinForms являются работоспособными. Другими словами, вы можете гарантировать, что объекты, которые вы загружаете, доступны до завершения программы. То же самое не верно для WebForms, поскольку HTTP является апатридом, а ASP.Net объединяет множество «магии» [ViewState, Server session, Cookies, Hidden fields и т. Д.] Для склеивания страниц веб-приложения.

С этой базовой концепцией легко сделать объект глобально доступным в WinForms. Используйте класс Singleton/Static и назначьте его членам. Вы всегда можете сказать .Instance .. [в случае статических классов/классов со статическими свойствами] для извлечения значений из любой формы.

One Gottcha - это «потокобезопасность» ... aka .. несколько форм, которые читают/записывают статическое свойство в одно и то же время. Если вы можете позаботиться об этом, отдых будет ветерок.

Для ваших выше проблем:

Вы можете иметь свой собственный класс Singleton кэша, который будет кэшировать записи. Класс Cache будет выполнять пользовательскую коллекцию. Вы должны убедиться, что он потокобезопасен [или убедитесь, что ваше приложение загружается только один раз и читает с этого момента] ... Возможно, вам нужно будет рассмотреть полноценную ORM, если вы хотите, чтобы изменения в базе данных отражались в объектах сущности ,

CacheList.OrderCache[orderNo].Customer.Address.City = "Las Vegas";

class static CacheList { public static Cache OrderCache {get; internal set;}

}

public class Cache : CollectionBase where T : Entity { .....

}

0

Вы должны иметь некоторый объект данных, который получает доступ к базе данных в любом случае, не так ли? Оберните это в классе CacheProxy, который попадает в базу данных, если у нее нет локальной копии. Я слышу, что вы можете use the System.Web cache in Winforms.

Смежные вопросы