Фабрика компонентов
Не все желуди обязаны являться полноценными классами с точки зрения системы типов 1Script. Согласитесь, странно заводить целый класс для хранения логина от ИТС, просто потому что кто-то пережарил желудей.
Философский вопрос в зал: откуда берутся желуди? Кто-нибудь? Может быть вы, в свитере цвета осенней листвы? Правильно, желуди растут на дубах! Дуб является источником желудей. На ветвях образуются цветочки, из цветочков появляются завязи, а из завязи - желуди.
И что самое приятное, дуб когда-то тоже был желудем, а значит, к нему применимы те правила игры, что и к обычным компонентам-желудям.
Итак, мы хотим передать Обновлятору логин и пароль в виде желудей. Для этого в новом классе, помеченном аннотацией &Дуб
, нужно объявить два метода, помеченные аннотацией &Завязь
. На дубе завязи, из завязей получатся желуди. Логично? Логично. Поехали!
&Дуб
Процедура ПриСозданииОбъекта()
КонецПроцедуры
&Завязь(Тип = "Строка")
Функция Логин() Экспорт
Возврат ПеременныеСреды().USERNAME;
КонецФункции
&Завязь(Тип = "Строка")
Функция Пароль(&Пластилин Логин) Экспорт
Если Логин = "user" Тогда
Возврат "password";
КонецЕсли;
Возврат ПеременныеСреды().PASSWORD;
КонецФункции
В листинге выше объявляются две функции-конструктора, возвращающие желуди. Как вы видите, желудь может быть чем угодно, а что угодно (в данном случае - строка) может быть желудем.
Т. к. Дуб
- это тоже желудь, а методы с "Завязью" - это псевдо-конструкторы, то такой метод может быть скреплен пластилином с другими желудями. Плохие желуди могут даже хардкодить значения паролей, но мы закроем на это глаза.
В листинге выше &Завязь
содержит параметр Тип
. Он требуется, если из имени функции непонятно, что за тип она вернет. Ну, нам-то с вами понятно, что Пароль
- это строка, но вот глупой железке надо немного помочь.
С другой стороны, если вы объявляете желудь с "типовым" именем, то и параметр добавлять не нужно:
&Завязь
Функция Строка(&Пластилин Логин, &Пластилин Пароль) Экспорт
Возврат Логин + ":" + Пароль;
КонецФункции