Переопределяемые и поставляемые объекты библиотеки

#std553

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

1. С точки зрения возможностей по настройке функциональности библиотеки для работы в конкретной конфигурации-потребителе все объекты библиотеки условно делятся на три категории:

2. Рекомендуется устанавливать для объектов этих категорий следующие правила поставки:

Эти рекомендации продиктованы следующими соображениями:

3. Для того чтобы упростить настройку библиотеки и снизить трудоемкость последующих обновлений версии библиотеки в конфигурации-потребителе следует минимизировать количество переопределяемых объектов с помощью следующих методик:

3.1. Переопределяемые общие модули следует называть с постфиксом Переопределяемый.

См. также: правила создания общих модулей

3.2. Переопределяемые общие модули должны содержать только экспортные процедуры, которые вызываются из кода самой библиотеки. Другими словами, не следует допускать вызовов процедур переопределяемых модулей непосредственно из кода конфигурации-потребителя.

Такое ограничение обусловлено соображением повышения устойчивости кода конфигурации, который вызывает библиотечные процедуры и функции, составляющие программный интерфейс библиотеки. К программному интерфейсу библиотеки следует относить только экспортные процедуры и функции непереопределяемых общих модулей.

Например, в библиотеке имеются модули ПапкиФайлов и ПапкиФайловПереопределяемый. Для использования в конфигурациях-потребителях в модуле ПапкиФайлов реализуется экспортная функция:

Функция ПапкаФайлов(ВладелецФайловСсылка) Экспорт

  СтандартнаяОбработка = Истина;
  Результат = Неопределено;
  ПапкиФайловПереопределяемый.ПриПолученииПапкиФайлов(ВладелецФайловСсылка, Результат, СтандартнаяОбработка);

  Если СтандартнаяОбработка Тогда
    // реализация по умолчанию
    Результат = ...
  КонецЕсли;
  Возврат Результат;

КонецФункции

а в модуле ПапкиФайловПереопределяемый - процедура-обработчик ПриПолученииПапкиФайлов:

// Вызывается из библиотеки при необходимости получить папку файлов для указанного владельца.
//
// Параметры:
//  ВладелецФайловСсылка – ЛюбаяСсылка                  - владелец файлов, для которого нужно вернуть папку.
//  ПапкаФайлов          – СправочникСсылка.ПапкиФайлов - в этот параметр нужно записать результат.
//  СтандартнаяОбработка – Булево                       - по умолчанию, Истина. В этом случае папка будет получена способом по умолчанию.
// Если значение параметра установить в Ложь, то в этой процедуре можно реализовать свой способ,
// которым в конфигурации получают папки файлов.
//
Процедура ПриПолученииПапкиФайлов(ВладелецФайловСсылка, ПапкаФайлов, СтандартнаяОбработка) Экспорт

КонецПроцедуры

При этом все вызовы из конфигурации-потребителя должны идти только к библиотечному модулю ПапкиФайлов. Обращение к ПапкиФайловПереопределяемый разрешается только из библиотечного модуля ПапкиФайлов.

3.3. При этом в переопределяемом модуле следует располагать только экспортные процедуры с пустой реализацией. В нем не должно быть каких-либо других не-экспортных процедур или функций. Базовую реализацию переопределяемых процедур следует располагать в непереопределяемом коде.

Такое ограничение вызвано необходимостью снизить трудоемкость последующих обновлений переопределяемых модулей в конфигурации-потребителе.
Например, неправильно поставлять переопределяемый модуль МояБиблиотекаПереопределяемый с какой-либо реализацией:

Функция НастройкаПараметровРаботы() Экспорт
 
 ПараметрыРаботы = Новый Структура;
 // если настройки по умолчанию не подходят, то измените их.
 ПараметрыРаботы.Вставить("ПоказыватьЕдинственныйРаздел",     Ложь);
 ПараметрыРаботы.Вставить("ЗадаватьДатуДляПрочихРазделов",    Ложь);
 ПараметрыРаботы.Вставить("ИспользоватьВнешнихПользователей", Ложь);
 Возврат ПараметрыРаботы;

КонецФункции

правильно:

// Позволяет настроить работу подсистемы.
//
// Параметры:
//  ПараметрыРаботы - Структура - содержит свойства:
//    * ПоказыватьЕдинственныйРаздел     - Булево - по умолчанию Ложь.
//    * ЗадаватьДатуДляПрочихРазделов    - Булево - по умолчанию Ложь.
//    * ИспользоватьВнешнихПользователей - Булево - по умолчанию Ложь.
//
Процедура ПриПолученииНастроекПараметровРаботы(ПараметрыРаботы) Экспорт

КонецПроцедуры

а установку значений по умолчанию перенести в общий модуль библиотеки:

Функция НастройкаПараметровРаботы()

 ПараметрыРаботы = Новый Структура;
 // настройки по умолчанию
 ПараметрыРаботы.Вставить("ПоказыватьЕдинственныйРаздел",     Ложь);
 ПараметрыРаботы.Вставить("ЗадаватьДатуДляПрочихРазделов",    Ложь);
 ПараметрыРаботы.Вставить("ИспользоватьВнешнихПользователей", Ложь);

 // а теперь запросим конфигурацию-потребитель на случай,
 // если эти умолчания не устраивают
 МояБиблиотекаПереопределяемый.ПриПолученииНастроекПараметровРаботы(ПараметрыРаботы);
 Возврат ПараметрыРаботы;

КонецФункции

3.4. При обновлении версии библиотеки в конфигурации-потребителе особого внимания требуют модули корневого объекта конфигурации и переопределяемые общие модули, так как автоматическое обновление таких «узких мест» конфигурации-потребителя невозможно. Для настройки в конфигурации переопределяемых общих модулей рекомендуется придерживаться общего подхода:

См. также