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

04.07.18

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

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

Скачать файл

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

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

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

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

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

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

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

 

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

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

 

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

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

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

 

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

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

 

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

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

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

 

 

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

См. также

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

Расширяемый форматтер структуры модулей 1С. Умеет автоматически расставлять стандартные области и раскидывать по ним процедуры и функции модуля, оформлять стандартные комментарии к методам с помощью ИИ. Также умеет анализировать модуль - извлекать структуру вызовов, используемые поля и т.д. Реализован в виде расширения (.cfe). Можно использовать как платформу для обработки кода в своих задачах автоматизации разработки.

12.02.2025    5075    326    wonderboy    38    

110

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

В третьей статье по докладу Александра Кириллова, с которым он выступил на конференции INFOSTART TECH EVENT 2024, обсудим подходы к рефакторингу платформеннозависимого кода

11.02.2025    777    it-expertise    0    

2

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

Во второй статье по докладу Александра Кириллова, с которым он выступил на конференции INFOSTART TECH EVENT 2024, поговорим об особенностях анализа конфигурации 1С на наличие платформеннозависимого кода.

31.01.2025    1445    it-expertise    1    

7

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

В практике нашей специальной команды по проектам сложных обновлений 1С прошел один из самых объёмных проектов: необходимо было обновить «1С: Бухгалтерия предприятия КОРП 3.0 + БИТ.ФИНАНС». Конфигурация содержала доработки практически по всем типам объектов метаданных. Длительность проекта составила 1 год и 2 месяца и обеспечила полной загрузкой 4 разработчиков на 6 месяцев.

31.01.2025    953    1c-izh    3    

5

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

В последнее время термин «чистый код» стал очень популярным. Появились даже курсы по данной тематике. Так что же это такое?

16.09.2024    16905    markbraer    66    

43

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

В статье рассматривается отказ от использования процедур и унификация формата ответа функций. Способ описывается на примере развития абстрактной информационной системы, работающей с PDF файлами.

10.09.2024    1326    acces969    4    

6

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

Для быстродействия большой базы данных важно не только оптимизировать запросы, но и соблюдать стандарты при разработке подписок на события, обработок для массового изменения данных, в реализации обработчиков обновления, расширений, регламентных заданий и в архитектуре СКД-отчетов. Расскажем о нюансах разработки компонентов большой системы.

28.08.2024    1831    Chernazem    3    

6

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

SOLID – принципы проектирования программных структур (модулей). Акроним S.O.L.I.D. образован из первой буквы пяти принципов. Эти принципы делают код более гибким, упрощают разработку. Принято считать, что принципы SOLID применимы только в объектно-ориентированном программировании. Но их можно успешно использовать и в 1С. Расскажем о том, как разобраться в принципах SOLID и начать применять их при работе в 1С.

22.08.2024    12220    alex_sayan    41    

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