Иногда бывает необходимо использовать общую функциональность для вызываемых методов. В иных сферах это удобно делать при помощи декораторов. Плюсы очевидны, не нужно делать самому, просто используем готовый, хорошо проверенный, единообразно работающий для всех вызовов своей функции, код. Особенно приятно когда этот код еще и приправлен синтаксическим сахаром в стиле:
@ФункцияДекоратор
Функция МояФункция
...Какой то код...
КонецФункции
Мы лишены подобных "специй" в платформе 1C, но кое-что можно придумать для облегчения жизни программиста.
В 1С нет возможности представить в виде объекта отдельную функцию, но можно в виде объекта использовать общий модуль или какой то ссылочный объект. Значит можно использовать функциональность паттерна декоратор на уровне модуля. Давайте пробовать!
В приложенной конфигурации реализован общий модуль МодульДекораторHTTPЗапросы, который берет на себя заботы о предоставлении общей функциональности для обработки HTTP-запросов: логирование, обработку некоторых ошибок, "горячую" замену алгоритма и т.п.
Разработчику достаточно будет написать обработчик в виде общего модуля, в котором реализовать метод Ответ(...), задача которого обработать сам HTTP-запрос, и не более.
Затем в модуле HTTP-сервиса необходимо вызвать метод Ответ(..) модуля МодульДекораторHTTPЗапросы, в параметрах которого отправить входящий HTTP-запрос и указать имя реализованного модуля обработчика.
Более подробно, в порядке обработки HTTP-сервиса, работа функции-декоратора выглядит так:
1. Происходит вызов HTTP-сервиса. В модуле HTTP-сервиса вызываем метод Ответ(...) модуля-декоратора, в параметрах перенаправляем HTTP-запрос и указываем имя обработчика.
2. Общий модуль МодульДекораторHTTPЗапросы делает большую работу за нас. Оценивает, проверяет, логирует... Выделенная строка вызывает нашу реализацию модуля-обработчика HTTP-запроса. "Горячую" замену алгоритма обеспечивает внешняя обработка, в модуле объекта, которой должен быть так же реализован метод Ответ(). Диспетчеризацию сервисов обеспечивает справочник "ПредоставляемыеСервисы", в том числе и хранение ссылки на внешнюю обработку - обработчик HTTP-запроса.
3. Наша реализация ответа занимается только ответом. На скрине ниже два общих модуля, в каждом собственная реализация ответа. Ни о чем дополнительно заботится не надо, все заботы взяла на себя функция Ответ() модуля МодульДекораторHTTPЗапросы.
Однако "не все так однозначно"(с). В этой реализации требуется для каждого метода сервиса создавать свой общий модуль, их количество может оказаться большим, правильные префиксы должны решить эту проблему. В 1С это стандарт, вместо пакетов использовать начало имени модуля, оно обозначает причастность к тому или иному "пакету". Так же придется прийти к соглашению с коллегами, что в каждом обработчике вызова будет метод Ответ(...). В других языка это регламентируется описанием класса или интерфейса, нам придется договариваться просто на словах.
Насколько это удобно и применимо для Вас, решайте сами.