Принципы ООП в 1С (GoF pattern visitor)

04.07.18

Разработка - Рефакторинг и качество кода

Шаблон проектирования visitor, по моему мнению весьма полезен для 1С.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Принципы ООП в 1С (GoF pattern visitor): пример реализации
.zip 10,87Kb
3 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

visitor или посетитель, данный шаблон решает задачу выноса бизнес логики из класса наружу. Приведу аналогию с принципом которому придерживаются разработчики БСП (да в принципе типовых конфигураций), если разработчик разрабатывая какой-то функционал предполагает, что какая-то чать может быть переопределена прикладными разработчиками, он выносит такие методы в переопределяемые общие модули. Переопределяемый общий модуль, это тот же модуль как и все остальные, просто в имени у него  есть слово "Переопределяемый", т.е. у него так же нужно включать возможность изменения если захотим что-то переопределить. По большому счету, все это держится на чистых договоренностях. Шаблон проектирования visitor решает данную задачу тем, что бизнес логика (ту которую в дальнейшем будет переопределяться или вообще отдаваться полностью на откуп прикладных программистов) описывается в самом посетителе.

На объектах 1С схема получается такая:

в предыдущих статьях подробнее рассматривалось как реализовывать квазии-ООП в 1С

В данном случаи обработка ОбработкаСодержащаяСложныеМетоды, некий контейнер методов какого-то бизнес функционала, она на поддержке, в нем метод КакойтоМетод2() переопределяемый из вне. Вот его содержимое:

Процедура КакойтоМетод2(Посетитель) Экспорт 
	Если Посетитель = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Посетитель.Посетить(Неопределено);
КонецПроцедуры

 

Тут на самом деле простор для творчества, можно определить какой-то базовый код, до или после вызова

Процедура КакойтоМетод2(Посетитель) Экспорт 
	Если Посетитель = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
// базовый алгоритм
	Посетитель.Посетить(Неопределено);
// базовый алгоритм
КонецПроцедуры

 

или например сделать что бы значение какой-то переменной для дальнейшего использования определялось внешним алгоритмом

Процедура КакойтоМетод2(Посетитель) Экспорт 
	Если Посетитель = Неопределено Тогда
		Возврат;
	КонецЕсли;
	

	Переменная = Посетитель.Посетить(Неопределено);
// базовый алгоритм с использованием Переменная 
КонецПроцедуры

 

или сделать так

Процедура КакойтоМетод2(Посетитель) Экспорт 
	Если Посетитель = Неопределено Тогда
		// Алгоритм по умолчанию.
    Иначе
       Посетитель.Посетить(Неопределено);
	КонецЕсли;
КонецПроцедуры

 

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

Пример использования:

	ОбработкаОбъект = Обработки.ОбработкаСодержащаяСложныеМетоды.Создать();
	ОбработкаОбъект.КакойтоМетод(); // Это вызов типового метода
	
	Посетитель = Обработки.Посититель1.Создать().Имплементация("ПосетительИнтерфейс");
	ОбработкаОбъект.КакойтоМетод2(Посетитель); // Вызов переопределяемого метода
	
	Посетитель = Обработки.Посититель2.Создать().Имплементация("ПосетительИнтерфейс");
	ОбработкаОбъект.КакойтоМетод2(Посетитель); // Вызов переопределяемого метода, но уже с другим алгоритмом.

 

 

Вступайте в нашу телеграмм-группу Инфостарт

ООП pattern visitor visitor GoF pattern ООП в 1С

См. также

HighLoad оптимизация Рефакторинг и качество кода Программист Бесплатно (free)

Рассказываем о том, как не ухудшить производительность интеграционного решения в процессе разработки и рефакторинга, когда новых фич в коробке все больше, а требования по производительности все выше. На живом примере покажем реализованный подход с использованием таких инструментов, как Docker, Redash, Vanessa Automation.

02.09.2025    710    user1827916    1    

2

Рефакторинг и качество кода Программист Россия Бесплатно (free)

GRASP-паттерны в 1С: меньше хаоса, больше архитектуры.

28.08.2025    4826    lapinio    41    

44

Рефакторинг и качество кода Программист 1С v8.3 1С:ERP Управление предприятием 2 Россия Бесплатно (free)

Недавно наша команда завершила разработку (на несколько тысяч часов) на проекте по внедрению ERP. Заказчик на этом проекте настоял на том, чтобы вся разработка была выполнена в расширениях. Расскажу, с чем столкнулись на 24-25-ых версиях платформы и какие выводы сделали.

19.08.2025    2212    ovetgana    0    

11

Тестирование QA Рефакторинг и качество кода Программист Бесплатно (free)

За два года ручного тестирования решений на базе платформы 1С я столкнулся с огромным количеством ошибок. Глубокий анализ их причин позволил выделить ТОП-5 наиболее частых источников сбоев в 1С-разработке. Понимание этих коренных причин – первый шаг к их предотвращению. В этой статье я делюсь своими наблюдениями и предлагаю практические пути снижения рисков для каждого типа ошибок.

12.08.2025    1646    Lagger117    3    

3

Рефакторинг и качество кода Программист Бесплатно (free)

Рассказываем о практике Code Review: ее целях, преимуществах и подводных камнях. Автор делает обзор существующих инструментов, а также подробно описывает собственную разработку для анализа правок и комфортного взаимодействия по замечаниям. Инструмент Git Code Review позволяет оставлять ручные комментарии с указанием важности и автоматически проверять код с помощью BSL Language Server. С его помощью можно не только детально изучать измененный код, но и отслеживать трансформацию структуры метаданных в наглядном формате. А главное – Code Review можно проводить как в 1С:Предприятии, так и через специализированный веб-интерфейс, интегрированный с GitHub и GitLab. Статья будет интересна и тем, кто уже практикует Code Review, и тем, кто к этому только подступается.

31.07.2025    4308    salexdv    9    

35

Рефакторинг и качество кода Обновление 1С Программист 1С v8.3 Бесплатно (free)

Проблемы и их решение из реальных проектов сложного обновления 1С, когда нужно было сохранить целостность данных, ускориться и уложиться в оцененные и утвержденные сроки.

02.07.2025    3941    1c-izh    9    

13

Рефакторинг и качество кода Информационная безопасность Пароли Программист 1С v8.3 Россия Абонемент ($m)

Представьте ситуацию: вы пишете обработку для отправки email-уведомлений клиентам. Чтобы подключиться к серверу почты, вам нужны: логин, пароль, SMTP-адрес. Что делает большинство программистов?

1 стартмани

23.06.2025    2747    markbraer    8    

3

Рефакторинг и качество кода Инструментарий разработчика Программист 1С v8.3 Абонемент ($m)

Обработка позволяет анализировать структуру методов в модуле и легко составлять её структуру, канонизировать, используя стандарты 1С.

3 стартмани

20.06.2025    1796    21    MikeLetto    3    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. MaCCapAkIII 31.07.24 13:14 Сейчас в теме
А чем данная реализация отличается, скажем, от использования расширений конфигурации? Ведь, насколько я понимаю, используя расширения мы также ничего не меняем в заимствованных объектах метаданных и расширяемых методах, все реализуется в расширении...
И еще. Правильно понимаю, что для применимости паттерна Посетитель необходимо, чтобы поддержка этого паттерна была реализована в самом посещаемом объекте? То есть если мы собираемся посетить КакойтоМетод2, то необходимо в коде этого метода прописать возможность обращения к методам посетителя? Это считается "без изменения основного класса"? Или я неправильно понимаю?
Для отправки сообщения требуется регистрация/авторизация