Принципы ООП в 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С

См. также

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

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

28.08.2025    3335    lapinio    36    

33

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

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

19.08.2025    1797    ovetgana    0    

9

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

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

12.08.2025    1517    Lagger117    3    

3

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

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

31.07.2025    4186    salexdv    9    

34

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

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

02.07.2025    3696    1c-izh    9    

13

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

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

1 стартмани

23.06.2025    2654    markbraer    8    

3

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

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

3 стартмани

20.06.2025    1680    21    MikeLetto    3    

9

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

Тестовая база обновлена через все ключевые релизы, всё протестировано, остатки сведены, вы готовы обновить «боевую» базу, но…по замерам для этого потребуется целая неделя, а у вас есть всего пара выходных. Знакомая ситуация? Расскажем, как увеличить скорость отработки промежуточных конфигураций!

18.06.2025    3989    1c-izh    14    

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