Модульная разработка
Проект состоит из элементов, но в функциональном смысле он разделен на изолированные части, каждая из которых может использоваться в других частях проекта.
Для выделения изолированных частей используйте подсистемы (свойства) и пакеты. Внутрь подсистем и пакетов добавляйте элементы: HTTP-сервисы, процессы интеграции, общие модули и т. д.
Стандартно внутри одной подсистемы вы можете использовать только элементы этой подсистемы. Элементы других подсистем недоступны вам без дополнительных действий.
- В подсистеме Б установите видимость у элементов и у языковых конструкций, которые вы хотите использовать «снаружи» нее.
- В подсистеме А используйте подсистему Б (или дополнительно импортируйте в элементы/модули подсистемы А пространства имен из подсистемы Б).
Область видимости элемента проекта
У любого элемента проекта есть свойство ОбластьВидимости со значениями:
- ВПодсистеме — элемент виден внутри своей подсистемы во всех пакетах. Значение по умолчанию;
- ВПроекте — элемент виден во всех подсистемах своего проекта;
- Глобально — элемент виден в других проектах.
ВидЭлемента: ОбщийМодуль
Имя: ОбщиеМетоды
Id: 76eb6f8f-e340-42ed-8dad-7a1104a6da02
ОбластьВидимости: ВПроекте
Тем самым вы сделаете элемент публичным, т. е. он может быть доступен в других подсистемах.
Видимость языковых конструкций
Переменным, методам, перечислениям, структурам, исключениям вы тоже можете задать в модуле область видимости. Для этого используйте аннотации видимости, которые могут принимать следующие значения:
- @Локально — конструкция видна только в своем модуле. Значение по умолчанию;
- @ВПодсистеме — конструкция видна только в подсистеме, которой принадлежит модуль;
- @ВПроекте — конструкция видна только в проекте, которому принадлежит модуль;
- @Глобально — конструкция видна в других проектах.
Например:
@Локально
конст СЕКУНД_В_ДНЕ = 60 * 60 * 24
@ВПодсистеме
структура УчетнаяЗапись
пер Ид: Uuid
пер Код: Строка?
;
@ВПроекте
метод ПолучитьОписание()
...
;
Квалифицированное имя элемента
Все элементы проекта порождают типы встроенного языка. Помимо «обычного», неквалифицированного, имени типы имеют квалифицированные имена. Квалифицированное имя типа состоит из пространства имен и «обычного» имени, разделенных символами «::». Типы, порождаемые элементами проекта, принадлежат пространству имен, совпадающему с именем подсистемы и пакета, в которой они были созданы.
Например, есть такой проект:
Тогда квалифицированные имена типов, порождаемых его элементами, будут выглядеть следующим образом:
- Магазины::Пакет::InformationsSystems
- Магазины::ОбменСоСкладом
- Основной::ОбменСоСкладом
- Основной::ПриемЗапросов
Для того чтобы указать имя типа и имя элемента проекта из другой подсистемы/пакета, можно использовать либо квалифицированное, либо неквалифицированное имя. Это зависит от того, только ли использует данная подсистема другую подсистему, или дополнительно к этому был выполнен импорт пространства имен.
Использование подсистем
У подсистемы есть свойство Использование. В этом свойстве вы можете перечислить подсистемы, публичные элементы которых вы хотите использовать в данной подсистеме. К типам таких элементов вы сможете обращаться по квалифицированному имени, например:
Реквизиты:
-
Имя: Владелец
Тип: Магазины::InformationSystems.Ссылка
Импорт пространств имен
В любые элементы проекта и в модули вы можете импортировать другие пространства имен.
В элементе проекта они перечисляются в свойстве Импорт, а в модуле для этого используется инструкция импорт.
Например в процессе интеграции:
ВидЭлемента: ПроцессИнтеграции
Имя: ОбменСоСкладом
Id: a79bd05e-800d-4d9c-a292-eeec023d3f07
ОбластьВидимости: ВПроекте
Импорт:
- ОбщиеМетоды
- КонвертацияФайлов
Например, в некотором модуле:
импорт ОбщиеМетоды
импорт КонвертацияФайлов
метод ПередЗаписью()
...
;
Публичные элементы проекта и конструкции языка из импортированных пространств вы можете использовать по неквалифицированному имени. Как будто это «ваши собственные» элементы из этой же подсистемы.
Импорт, выполненный в элементе проекта, не влияет на его модули. То есть пространства имен, импортированные в элемент проекта, не становятся автоматически доступны в модулях этого элемента. Если эти же пространства имен нужны вам и в модулях, то в каждый модуль их нужно импортировать отдельно.