Преимущества пакетов
Пакеты обладают следующими преимуществами:
- Модульность
-
Блоки взаимозависимого кода выделены в логические модули, как это сделано в других языках программирования.
В программировании существует множество способов для группировки кода, например с помощью пространств имен (namespaces), модулей (units) и классов.Со стандартными процедурами и функциями базы данных это не возможно.
- Упрощение отслеживания зависимостей
-
Пакеты упрощают механизм отслеживания зависимостей между набором связанных процедур, а также между этим набором и другими процедурами, как упакованными, так и неупакованными.
Каждый раз, когда упакованная подпрограмма определяет, что используется некоторый объект базы данных, информации о зависимости от этого объекта регистрируется в системных таблицах Firebird.После этого, для того чтобы удалить или изменить этот объект, вы сначала должны удалить, то что зависит от него.Поскольку зависимости от других объектов существуют только для тела пакета, это тело пакета может быть легко удалено, даже если какой-нибудь другой объект зависит от этого пакета.Когда тело удаляется, заголовок остаётся, что позволяет пересоздать это тело после того, как сделаны изменения связанные с удалённым объектом.
- Упрощение управления разрешениями
-
Поскольку Firebird выполняет подпрограммы с полномочиями вызывающей стороны, то каждой вызывающей подпрограмме необходимо предоставить полномочия на использования ресурсов, если эти ресурсы не являются непосредственно доступными вызывающей стороне.Использование каждой подпрограммы требует предоставления привилегий на её выполнение для пользователей и/или ролей.
У упакованных подпрограмм нет отдельных привилегий.Привилегии действуют на пакет в целом.Привилегии, предоставленные пакетам, действительны для всех подпрограмм тела пакета, в том числе частных, и сохраняются для заголовка пакета.
- Частные области видимости
-
Некоторые процедуры и функции могут быть частными (private), а именно их использование разрешено только внутри определения пакета.
Все языки программирования имеют понятие области видимости подпрограмм, которое невозможно без какой-либо формы группировки.Пакеты Firebird в этом отношении подобны модулям Delphi.Если подпрограмма не объявлена в заголовке пакета (interface), но реализована в теле (implementation), то такая подпрограмма становится частной (private). Частную подпрограмму возможно вызвать только из её пакета.