Программный Файл: ...\Samples\Solution\Ffc\_PoolManager.scx
Представленный пример демонстрирует, как вы можете использовать в своих Проектах класс Диспетчера Пула (Pool Manager), который обеспечивает управление некоторым множеством или Коллекцией Объектов, интенсивно и неоднократно используемых в короткий промежуток времени.
В данном примере используются следующие Классы.
Класс | Библиотека Классов | Краткое Описание |
---|---|---|
_poolmanager.vcx |
Обеспечивает эффективное управление Коллекцией или подмножеством Объектов одного пользовательского Класса. |
Пулинг Объектов (объединение)
В представленном примере, пользовательские Формы собраны в некоторый Пул (Коллекцию) таким образом, что уже созданные Формы могут быть использованы неоднократно при обработке Данных, выборе конкретного Клиента. (Вместо того, чтобы каждый раз создавать новый Экземпляр рассматриваемого набора Форм.)
Для использования функций класса Диспетчера Пула достаточно определить следующие Значения для базовых Свойств:
cClass = frmCustomer
cClassLibrary = frmCustomer.vcx
Связывание ключевых Событий Диспетчера Пула
Вы можете Связать основные События рассматриваемого класса _PoolManager. В рассматриваемом примере: в соответствующем Событии пользовательский формы Init выполняется Определение Локального обработчика для соответствующих Событий-Методов рассматриваемого Класса: PoolManager_ObjectRequested и PoolManager_ObjectReturned, а соответствующие Обработчики в локальной форме: _PoolManager ObjectRequested и ObjectReturned, которые отслеживают текущее состояние Базовых Событий:
![]() |
|
---|---|
BINDEVENT(This.PoolManager,"ObjectRequested",ThisForm,"PoolManager_ObjectRequested") |
Requesting Objects (Вызов Объектов)
Для вызова (активации) требуемого объекта из созданного Пула, достаточно вызвать соответствующий Метод Get Диспетчера _PoolManager.
Для открытия пользовательской Формы в рассматриваемом Примере:
-
Выберите Имя Клиента в представленном Списке.
-
Выполните команду View Customer (Просмотр Клиента).
Вы можете открыть несколько копий Формы, выбрав различных Клиентов (как показано выше) - View Customer, в каждом случае вызов Объекта указанной Формы выполняется при помощи рассматриваемого Диспетчера Пула Объектов. Метод пользовательской формы ViewCustomer может содержать следующий фрагмент программного кода:
![]() |
|
---|---|
loForm = ThisForm.PoolManager.Get(m.lcCustID) |
В данном примере, указанный Метод Get
возвращает еще неиспользуемый Объект из Пула или создает Новый Объект
(Форму). Когда вы выбираете нового Клиента (создается соответствующая
форма данного Клиента), в соответствующем событии Init данной формы выполняется привязка Событий диспетчера Пула (форм):
_PoolManager ObjectRequested и ObjectReturned, которые "закрепляются"
за приватными переменными с именем THISPOOLMANAGER,
которые создаются в каждой копии Метода Get:
![]() |
|
---|---|
BINDEVENT(THISPOOLMANAGER,"ObjectRequested",This,"PoolManager_ObjectRequested") |
В таком случае, можно использовать выполнение для пользовательской Формы Метода Hide - вместо метода Release, что обеспечивает более эффективное управление Пулом пользовательских Форм (формы не разрушаются при их закрытии, и не создаются вновь при повторном обращении).
Returning Objects (Возврат Объектов)
Для освобождения сохраненного ранее Объекта в Пуле Диспетчера _PoolManager используется соответствующий метод Free. В рассматриваемом примере, в пользовательской форме, в соответствующем событии QueryUnloadсодержится следующий фрагмент программного кода, который фактически "освобождает" данный Объект из под Контроля Диспетчера (исключает из Пула):
![]() |
|
---|---|
If Vartype(This.oPoolManager) == "O" |