Аннотация: В этой лекции слушатель ознакомится с возможностями запуска нескольких модулей из одного приложения, совместного использования данных и способами передачи параметров. Также в этой лекции слушатель научится создавать библиотеки PL/SQL-кода и объектов, узнает, в чем преимущество многократного использования объектов и кода.
В Oracle Forms вы можете разрабатывать приложения, состоящие из одного и более модулей. В этой главе будет рассмотрено создание приложений с многомодульной структурой и обмен данными между составляющими этой структуры (рис. 12.1).
Рис. 12.1. Организация многомодульного приложения
Основной вопрос, который возникает, — это какова потребность в таком приложении и какой выигрыш от использования такой архитектуры. Для ответа перечислим основные преимущества использования многомодульного приложения :
- Отладка.
- Логика приложения.
- Масштабируемость и производительность.
Остановимся на каждом из пунктов более подробно.
Многомодульные программы. Межмодульные связи. Многоязыковые программы. 17 лекция
Отладка — многомодульное приложение проще отладить, так как намного проще разбираться в небольших фрагментах кода и не ставить точки останова по всему приложению в поисках ошибки, а отлаживать конкретный модуль . Если у вас, к примеру, имеется готовое отлаженное приложение , то почему бы не интегрировать его в основной модуль ? Это значительно проще и эффективнее, чем дописывать существующее приложение .
Логика приложения — многомодульное приложение позволяет разбить вашу задачу на логические единицы, тем самым давая возможность дорабатывать и вносить изменения не во все приложение , а лишь в отдельный модуль . Запуская отдельные модули приложения, вы можете определять тип открытия нового модуля, указывая Forms , открывать новую форму в той же сессии, что и родительская, или создать для него отдельную сессию. Логику такого приложения всегда проще понять и модернизировать.
Производительность — большие формы всегда намного дольше загружаются; а зачем загружать те части приложения, которые в ходе работы оказываются ненужными? В многомодульных приложениях все намного проще, так как необходимые структуры можно загружать по мере их надобности. Приложения, имеющие такую архитектуру, расходуют намного меньше данных.
Запуск другой формы
В Oracle Forms для запуска другой формы существуют встроенные подпрограммы, которые перечислены ниже:
- OPEN_FORM — открывает независимую форму ;
- CALL_FORM — вызывает модальную форму ;
- NEW_FORM — заменяет текущую форму .
Для более подробного ознакомления с этими процедурами выполните примеры, которые будут приведены далее.
CALL_FORM — запускает указанную форму, оставляя порождающую форму активной; Forms запускает вызываемую форму с теми же опциями Run Form , что и у порождающей формы. Когда вызываемая форма завершается — по функции EXIT или в результате неправильной передачи управления — обработка возвращается в порождающую форму в точку, откуда исходил вызов CALL . По умолчанию CALL использует параметры HIDE и NO_REPLACE :
Язык Си с нуля — Урок 47 — Многофайловые проекты. Создание и подключение. Заголовочные файлы.
- HIDE заставляет Forms стирать вызывающую форму с экрана перед рисованием вызываемой формы. Если вы используете параметр NO_HIDE , Forms не стирает вызывающую форму перед рисованием вызываемой формы. Это означает, что если вы вызываете форму с параметром NO_HIDE и некоторая страница вызываемой формы меньше области экрана, вызывающая форма выдается фоном.
- NO_REPLACE заставляет Forms поддерживать характеристику Default Menu Application вызывающей формы. Если вы используете параметр REPLACE , Forms заменяет характеристику Default Menu Application вызывающей формы на характеристику Default Menu Application вызываемой формы.
Процедура CALL_FORM имеет много описаний, которые вы можете найти в Online Help Forms.
Рассмотрим несколько основных способов написаний этих процедур, а также перечислим возможные параметры.
Синтаксис процедуры CALL_FORM
CALL_FORM (formmodule_name VARCHAR2); CALL_FORM (formmodule_name VARCHAR2, display NUMBER, switch_menu NUMBER, query_mode NUMBER, data_mode NUMBER, paramlist_name VARCHAR2); .
- formmodule_name — определяет имя модуля. Тип данных VARCHAR2 .
- display ( HIDE установлен по умолчанию) — Form Builder скрывает вызывающее приложение перед прорисовкой вызванного модуля:
- NO_HIDE — Form Builder не стирает вызывающую форму перед рисованием вызываемой формы;
- HIDE — Form Builder скрывает вызывающее приложение перед прорисовкой вызванного модуля.
- DO_REPLACE — заставляет Form Builder заменить меню по умолчанию на модуль меню вызываемой формы;
- NO_REPLACE — заставляет Form Builder поддерживать характеристику Default Menu Application вызывающей формы.
- QUERY_ONLY — заставляет Form Builder запускать формы в режиме RED_ONLY (только чтение), а также запрещает пользователю выполнять операции DML ;
- NO_QUERY_ONLY — заставляет Form Builder запускать формы в нормальном режиме.
- SHARE_LIBRARY_DATA — в режиме выполнения построитель форм открывает общий доступ между формами;
- NO_SHARE_LIBRARY_DATA — в режиме выполнения построитель форм не открывает общий доступ к данным библиотеки между формами.
BEGIN CALL_FORM(‘FormB’, no_hide, no_replace, query_only); END;
Листинг 12.1 . Вызов формы с помощью процедуры CALL_FORM
Ниже на рисунке приведен пример из листинга 11, где вызывающая форма не скрывается после запуска другой формы, но, несмотря на это, остается неактивной (рис. 12.2).
Рис. 12.2. Пример вызова формы с параметром NO_HIDE
DECLARE pl_id PARAMLIST; BEGIN pl_id := Get_Parameter_List(‘list_data’); IF NOT Id_Null(pl_id) THEN Destroy_Parameter_List( pl_id ); END IF; pl_id := Create_Parameter_List(‘list_data’); Add_Parameter(pl_id,’l_param’,TEXT_PARAMETER,:item.param); CALL_FORM(‘C:exempleFormb’,NO_HIDE, no_replace, no_query_only, pl_id); END;
Листинг 12.2 . Вызов формы с передачей параметров
Предыдущий пример показывает, как с помощью списка параметров (рис. 12.3) можно передать значение переменной. Вы также можете использовать глобальные переменные и пользовательские параметры для передачи значений.
Рис. 12.3. Передача параметров через процедуру CALL_FORM
Ограничения в использовании CALL_FORM :
- Передаваемый список параметров может содержать параметры типа TEXT_PARAMETER , но не DATA_PARAMETER .
- После окончания сессии память, занятая процедурой CALL_FORM , не освобождается и образует стек вызываемых форм, поэтому не стоит злоупотреблять этой процедурой.
Запуск формы с помощью процедуры OPEN_FORM
OPEN_FORM — открывает указанную форму. Эта процедура в основном используется в многомодульных приложениях . Процедура OPEN_FORM может принимать различное число параметров, поэтому существует довольно много способов ее оформления. Ниже приведены некоторые из возможных вариантов написания этой процедуры.
OPEN_FORM (form_name VARCHAR2); OPEN_FORM (form_name VARCHAR2, activate_mode NUMBER, session_mode NUMBER, data_mode NUMBER, paramlist_id PARAMLIST); .
- form_name — имя открываемой формы;
- activate_mode — управляет передачей фокуса. Это свойство может принимать два значения:
- ACTIVE — после открытия формы передает фокус управления вызванной форме, делая ее активной;
- NO_ACTIVE — после открытия фокус управления остается в вызывающем модуле;
- NO_SESSION — указывает, что открываемая форма должна использовать текущую сессию;
- SESSION — указывает, что для открываемой формы нужно создать новую сессию;
- SHARE_LIBRARY_DATA — в режиме выполнения построитель форм открывает общий доступ между формами;
- NO_SHARE_LIBRARY_DATA — в режиме выполнения построитель форм не открывает общий доступ к данным библиотеки между формами;
- paramlist_name [ID] — имя списка параметров или его идентификатор.
- Когда вы будете определять параметр ACTIVE или NO_ACTIVE , учтите, что в первом случае все выполняемые операторы , определенные после вызова процедуры, будут игнорироваться, так как фокус немедленно покидает вызывающее окно по завершении открытия новой формы. Если вы выбираете параметр NO_ACTIVE , то все исполняемые операторы, определенные ниже процедуры OPEN_FORM , будут выполнены по окончании загрузки открываемой формы в память.
- Если вызывающая форма находится в режиме QUERY_ONLY , то и открываемая форма будет находиться в режиме QUERY_ONLY .
- Если вы используете параметр SESSION, то определение параметра data_mode как SHARE_LIBRARY_DATA вызовет ошибку выполнения ( runtime error ).
Теперь, когда мы ознакомились со всеми особенностями процедуры, выполним примеры, демонстрирующие влияние вышеописанных параметров.
1. OPEN_FORM(‘form_name’); — открывает форму с параметром NO_ SESSION по умолчанию, — то есть форма будет открыта в текущей сессии (процессе). 2. OPEN_FORM(‘form_name’, activate, no_session) — открывает форму в текущей сессии и немедленно передает ей управление 3. OPEN_FORM(‘form_name’, activate, session); — открывает форму и создает для нее новую сессию, — после загрузки форма немедленно получает управление.
Листинг 12.3 . Примеры вызова процедуры OPEN_FORM
Ниже на рис. 12.4 изображен пример № 2 из листинга 12.3, на котором четко видны две активные формы.
Рис. 12.4. Вызов формы с помощью процедуры OPEN_FORM
Для того чтобы передать значение в открываемую форму, воспользуйтесь нижеприведенным примером, в котором показано, как передаются параметры через процедуру OPEN_FORM (рис. 12.5).
Рис. 12.5. Передача параметров через процедуру OPEN_FORM
DECLARE pl_id PARAMLIST; form_name VARCHAR2(20); BEGIN pl_id := Get_Parameter_List(‘list_data’); IF NOT Id_Null(pl_id) THEN Destroy_Parameter_List( pl_id ); END IF; pl_id := Create_Parameter_List(‘list_data’); Add_Parameter(pl_id,’l_param’,TEXT_PARAMETER,:item.param); OPEN_FORM(Formb’,activate, no_session, pl_id); END;
Источник: intuit.ru
Выбор между многомодульной и одномодульной конструкцией [закрыто]
В чем разница между многомодульной и одномодульной архитектурой программного обеспечения? Каковы преимущества и недостатки каждого? Когда следует использовать каждый из них и почему?
Создан 07 ноя.
Dima Zelinskyi
Пожалуйста, не пишите ответы в телах вопросов. Вместо этого переместите свой ответ в ответ. Таким образом, люди могут проголосовать за качество вопроса и ответа по отдельности, и вы в конечном итоге сможете принять ответ. — Pops
Хорошо, спасибо, на будущее. Я новый пользователь. — Dima Zelinskyi
Я так понимаю, это не проблема. Хотя вы можете внести это изменение прямо сейчас; тебе не нужно ждать следующего раза. Или я могу сделать это для тебя. — Pops
Думаю, мне нужна твоя помощь, потому что Ой! Ваш ответ не может быть отправлен, потому что: Пользователи с репутацией менее 100 не могут ответить на свой вопрос в течение 8 часов после запроса. Вы можете ответить самостоятельно через 7 часов. А до тех пор используйте комментарии или вместо этого отредактируйте свой вопрос. Спасибо — Dima Zelinskyi
О, да, это была функция, которую они добавили, чтобы люди не использовали неправильные ответы. Я могу это сделать. Кроме того, получите пять очков репутации «научитесь пользоваться сайтом». — Pops
2 ответы
Основное преимущество использования нескольких модулей заключается в том, что вы можете использовать их повторно, тогда как отдельные модули часто содержат несколько функций, которые не обязательно связаны друг с другом, и их невозможно использовать повторно. Это зависит от размера проекта, но для больших проектов использование нескольких модулей дает больше преимуществ.
Несколько модулей также упрощают обновление и изменение системы. Если вы обнаружите ошибку, вам нужно будет обновить только модуль, содержащий ошибку, а не всю систему.
Время компиляции также лучше для системы с большим количеством модулей, поскольку не обязательно все они должны быть скомпилированы для небольших изменений (конечно, с достаточно умным компилятором это не должно быть проблемой и для одномодульных программ). Еще одна проблема — это тестирование. Тестирование небольших модулей может уменьшить количество ошибок, поскольку они могут быть выявлены в конкретном модуле. Что касается недостатков, может быть сложнее поддерживать несколько модулей; если они существуют в большом количестве и недостаточно хорошо документированы, отслеживание зависимостей также может быть утомительной задачей. Опять же, это зависит от размера проекта.
Источник: stackovergo.com
Выбор между многомодульным и одномодульным дизайном
В чем различия между многомодульными и одномодульными архитектурами программного обеспечения? Каковы преимущества и недостатки каждого? Когда следует использовать каждый из них и почему?
спросил(а) 2011-11-07T17:46:00+04:00 11 лет, 8 месяцев назад
добавить комментарий
пожаловаться
Основное преимущество использования нескольких модулей заключается в том, что вы можете повторно использовать их, тогда как отдельные модули часто содержат несколько функциональных возможностей, не связанных друг с другом, и нецелесообразны для повторного использования. Это зависит от размера проекта, но для больших проектов несколько модулей приносят больше преимуществ.
Несколько модулей также обеспечивают более легкое обновление и изменение системы. Если вы обнаружите ошибку, вам нужно будет обновить модуль, содержащий ошибку, а не всю систему.
Время компиляции также лучше для системы с большим количеством модулей, так как необязательно все они должны быть скомпилированы для небольших изменений (конечно, с достаточно умным компилятором это не должно быть проблемой для одномодульных программ). Тестирование — еще одна проблема. Тестирование меньших модулей может уменьшить количество ошибок, поскольку они могут быть привязаны к их конкретному модулю.
Что касается недостатков, несколько модулей могут быть сложнее поддерживать; если они существуют в большом количестве и не документированы достаточно хорошо, следующие зависимости также могут быть утомительной задачей.
Опять же, это зависит от размера проекта.
ответил(а) 2011-11-07T17:55:00+04:00 11 лет, 8 месяцев назад
Источник: progi.pro