#std469¶
Правила создания общих модулей¶
1.1.¶
Общие модули создавайте для процедур и функций, объединенных по одному признаку. Обычно в один модуль попадает код:
- одной подсистемы конфигурации;
- или одного функционального назначения (например, работа со строками, общие сервисные функции).
1.2.¶
При разработке общих модулей выбирайте один из четырех контекстов выполнения.
Свойства:
-
Клиент (управляемое приложение) -
Сервер -
Внешнее соединение -
Клиент (обычное приложение) -
Вызов сервера
Назначение: внутренняя серверная бизнес-логика, недоступная клиентскому коду.
Пример имени: ОбщегоНазначения (или ОбщегоНазначенияСервер).
Свойства:
-
Клиент (управляемое приложение) -
Сервер -
Внешнее соединение -
Клиент (обычное приложение) -
Вызов сервера
Назначение: серверные процедуры и функции, доступные из клиентского кода.
Пример имени: ОбщегоНазначенияВызовСервера.
Свойства:
-
Клиент (управляемое приложение) -
Сервер -
Внешнее соединение -
Клиент (обычное приложение) -
Вызов сервера
Назначение: клиентская бизнес-логика.
Пример имени: ОбщегоНазначенияКлиент (или ОбщегоНазначенияГлобальный).
Свойства:
-
Клиент (управляемое приложение) -
Сервер -
Внешнее соединение -
Клиент (обычное приложение) -
Вызов сервера
Назначение: единый код, одинаково выполняемый на клиенте и сервере.
Пример имени: ОбщегоНазначенияКлиентСервер.
2.1.¶
Серверные общие модули используйте для внутренней серверной бизнес-логики, которая недоступна клиентскому коду.
Модули должны быть доступны в управляемом приложении, обычном приложении и внешнем соединении.
-
Вызов серверавыключенчтобы обеспечить корректный вызов процедур и функций, которые работают с мутабельными типами (
СправочникОбъект,ДокументОбъекти т.п.).
Типовые случаи:
- обработчики подписок на события, принимающие объект;
- серверные процедуры и функции, которым объект передается из модулей объектов, подписок на события и аналогичных серверных сценариев.
Именуйте такие модули по общим правилам именования.
Примеры
РаботаСФайлами, FilesOperations.
Если возможен конфликт имен с глобальным контекстом,
допускается постфикс Сервер (Server).
Примеры
РегламентныеЗаданияСервер, ScheduledJobsServer.
2.2.¶
Серверные общие модули для вызова с клиента содержат серверные процедуры и функции, которые образуют клиентский API сервера.
-
Вызов серверавключен -
Внешнее соединениевыключен -
Клиент (обычное приложение)выключен
Именуйте по общим правилам именования
с обязательным постфиксом ВызовСервера (ServerCall).
Примеры
РаботаСФайламиСлужебныйВызовСервера, FilesOperationsInternalServerCall.
Экспортные процедуры и функции в таких модулях
не должны принимать мутабельные типы (СправочникОбъект, ДокументОбъект и т.п.),
потому что их нельзя передавать между клиентом и сервером.
Проверки¶
#v8cs:common-module-name-cached #v8cs:common-module-name-client-cached #v8cs:common-module-name-server-call-cached #v8cs:common-module-name-server-call #v8cs:extension-md-object-prefix
См. также¶
- #std679: Ограничение на установку признака «Вызов сервера» у общих модулей
- #std644: Обеспечение совместимости библиотек
2.3.¶
Клиентские общие модули содержат клиентскую бизнес-логику.
-
Клиент (управляемое приложение) -
Клиент (обычное приложение)
Исключения допустимы, если код должен быть доступен только в одном режиме (только управляемое, только обычное, только внешнее соединение).
Используйте постфикс Клиент (Client).
Примеры
РаботаСФайламиКлиент, FilesOperationsClient.
См. также: минимизация кода, выполняемого на клиенте.
2.4.¶
Чтобы избежать дублирования кода, используйте клиент-серверные общие модули для процедур и функций, чей код одинаков на сервере и на клиенте.
-
Вызов серверавыключен
Используйте постфикс КлиентСервер (ClientServer).
Примеры
РаботаСФайламиКлиентСервер, FilesOperationsClientServer.
Если в таком модуле появляется ветвление клиент/сервер, не используйте для этого инструкции препроцессора.
Разделяйте отличающуюся функциональность по модулям соответствующего типа (по правилам п. 2.1 и 2.3).
Такой подход повышает модульность, упрощает контроль клиент-серверного взаимодействия и снижает риск ошибок из-за различий клиентского и серверного кода.
Подробнее: Использование директив компиляции и инструкций препроцессора.
Особый случай смешанных модулей: модули форм и команд, где клиентская и серверная логика осознанно расположены в одном модуле.
3.1.¶
Имена общих модулей формируйте по общим правилам именования. Название модуля должно совпадать с названием подсистемы или механизма, который он реализует.
Избегайте общих слов:
Процедуры;Функции;Обработчики;Модуль;Функциональность.
Используйте такие слова только в исключительных случаях, когда они реально уточняют назначение.
Чтобы различать модули одной подсистемы в разных контекстах, применяйте постфиксы из пп. 2.1-2.4.
3.2.¶
Дополнительно к базовым постфиксам допускаются уточняющие постфиксы.
3.2.1.¶
Для глобальных модулей используйте постфикс Глобальный (Global).
Постфикс Клиент в этом случае не добавляйте.
Свойства:
-
Глобальный
Примеры
РаботаСФайламиСлужебныйГлобальный, FilesOperationsInternalGlobal.
Проверки¶
#v8cs:common-module-name-global-client
3.2.2.¶
Для модулей с признаком Привилегированный
используйте постфикс ПолныеПрава (FullAccess).
Свойства:
-
Привилегированный
Примеры
РаботаСФайламиСлужебныйПолныеПрава, FilesOperationsInternalFullAccess.
Проверки¶
#v8cs:common-module-name-full-access
3.2.3.¶
Для модулей с функциями повторного использования возвращаемых значений используйте постфиксы:
ПовтИсп(Cached) — для серверного варианта;КлиентПовтИсп(ClientCached) — для клиентского варианта.
Свойства:
-
Повторное использование возвращаемых значений
Примеры
РаботаСФайламиСлужебныйКлиентПовтИсп, FilesOperationsInternalClientCached.
См. также¶
3.2.4.¶
В библиотечных конфигурациях для модулей, чью реализацию допускается изменять, используйте постфиксы:
Переопределяемый(Overridable);КлиентПереопределяемый(ClientOverridable).
Примеры
РаботаСФайламиКлиентПереопределяемый, FilesOperationsClientOverridable.
См. также¶
3.2.5.¶
В локализуемых конфигурациях, которые выпускаются для разных стран и регионов, модули национальной специфики именуйте с постфиксами:
Локализация(Localization);КлиентЛокализация(ClientLocalization).
Примеры
ЭлектроннаяПодписьСлужебныйЛокализация, ElectronicSignatureInternalLocalization.
См. также¶
Проверки¶
#bslls:CommonModuleInvalidType #bslls:CommonModuleNameCached #bslls:CommonModuleNameClientServer #bslls:CommonModuleNameClient #bslls:CommonModuleNameFullAccess #bslls:CommonModuleNameGlobalClient #bslls:CommonModuleNameGlobal #bslls:CommonModuleNameServerCall #bslls:CommonModuleNameWords
#acc:73 #acc:80 #acc:83 #acc:84 #acc:85 #acc:90 #acc:125 #acc:363 #acc:547 #acc:1245