Хороший способ растянуть объект на несколько классов

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

Спасибо

12.12.2008 18:12:06
2 ОТВЕТА
РЕШЕНИЕ

Принципиальное различие в WebForms и WinForms заключается в том, что WinForms сохраняют состояние. Другими словами, вы можете убедиться, что загруженные вами объекты доступны до тех пор, пока программа не будет закрыта. То же самое нельзя сказать о WebForms, так как HTTP не имеет состояния и ASP.Net сплетает много «волшебства» [ViewState, сеанс сервера, файлы cookie, скрытые поля и т. Д.], Чтобы склеивать страницы веб-приложения.

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

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

Для вашей вышеуказанной проблемы:

Вы можете иметь свой собственный класс Singleton Cache, который будет кэшировать записи. Класс 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 { .....

}

1
12.12.2008 18:36:04

У вас должен быть какой-то объект данных, который в любом случае обращается к базе данных, верно? Оберните это в класс CacheProxy, который попадет в базу данных, если у него нет локальной копии. Я слышал, что вы можете использовать кэш System.Web и в Winforms .

0
12.12.2008 18:15:35