Принципы ООП в 1С (pattern Chain of responsibility)

22.06.18

Разработка - Языки и среды

Данная статья является продолжением https://infostart.ru/public/850699, за основу будет применен тот же подход

Файлы

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

Наименование Скачано Купить файл
(только для физ. лиц)
Принципы ООП в 1С (pattern Chain of responsibility):
.zip 10,62Kb
2 1 850 руб. Купить

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

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

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

Chain of responsibility или Цепочка обязанностей

из wiki
Шаблон рекомендован для использования в условиях:

  • в разрабатываемой системе имеется группа объектов, которые могут обрабатывать сообщения определенного типа;
  • все сообщения должны быть обработаны хотя бы одним объектом системы;
  • сообщения в системе обрабатываются по схеме «обработай сам либо перешли другому», то есть одни сообщения обрабатываются на том уровне, где они получены, а - другие пересылаются объектам иного уровня.

Если по простому, то данный шаблон, это набор неких блоков которые последовательно обрабатывают входящие данные. 

Рассмотрим реализацию данного шаблона на примере создания механизма логирования. 

Всякие плюшки на подобии имплементации интерфейсов или наследования классов будет реализоваваться через явную связь обработок.

Принцип применен тот же, чито в шаблоне Decorator

Создаем интерфейс, в нем объявляются 2 метода УстановитьHandler и СделатьЗаписьЛога

Создаем 2 класса для логирования в журнал регистрации и для логирования в регистр

Реквизит Handler имеет тип ЛогированиеИнтерфейс, абстракция однако. 

УровеньЛогирования - число, это тот уровень при котором будет текущий логер писать данные.

 

Применение такое:

// Уровни логирования
	// 1 - инфо.
	// 2 - Предупреждения.
	// 3 - Ошибка.
	
	Логирование = Обработки.ЛогированиеЖР.Создать().Конструктор(2).Имплементация("ЛогированиеИнтерфейс");	
	ЛогированиеРегистр = Обработки.ЛогированиеРегистр.Создать()
	.Конструктор(3)
	.Имплементация("ЛогированиеИнтерфейс");
	
	Логирование.УстановитьHandler(ЛогированиеРегистр);

	
	Данные = Новый Структура("Сообщение, УровеньЛогирования", "Проверка предупреждения", 2);
	Логирование.СделатьЗаписьЛога(Данные);
	
	Данные = Новый Структура("Сообщение, УровеньЛогирования", "Проверка ошибки", 3);
	Логирование.СделатьЗаписьЛога(Данные);

 

через УстановитьHandler мы добавляем в очередь логеры, которые последовательно будут обрабатывать методы. 

переменная Логирование - это так же интерфейс

кстати, этот код можно вынести в какой-нибудь общий модуль

Логирование = Обработки.ЛогированиеЖР.Создать().Конструктор(2).Имплементация("ЛогированиеИнтерфейс");	
	ЛогированиеРегистр = Обработки.ЛогированиеРегистр.Создать()
	.Конструктор(3)
	.Имплементация("ЛогированиеИнтерфейс");
	
Логирование.УстановитьHandler(ЛогированиеРегистр);

Какой профит мы получаем при таком подходе, каждый логер это отдельный алгоритм сохранение записи (ЖР, Файл, СМС и прочее), в коде мы просто задаем уровень к которому относится тек. запись 

Данные = Новый Структура("Сообщение, УровеньЛогирования", "Проверка ошибки", 3);
Логирование.СделатьЗаписьЛога(Данные);

далее уже определяется в самом логере, мое это или нет, если нет, передаем дальше.

Картина получается такая 

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

 

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

ООП pattern Chain of responsibility Chain of responsibility GoF pattern ООП в 1С

См. также

Языки и среды Программист ИТ-компания Бесплатно (free)

В статье рассматриваются принципы работы с асинхронным программированием в Python с использованием async/await. На практических примерах показано, как создавать и управлять асинхронными задачами, использовать ключевые методы модуля asyncio, такие как create_task, gather, wait_for, и избегать распространённых ошибок. Материал будет полезен разработчикам, которые хотят улучшить производительность своих приложений за счёт асинхронного выполнения операций.

03.03.2025    1396    war41k    2    

4

Языки и среды Программист 1С v8.3 Бесплатно (free)

Будем писать свои скрипты на питоне и запускать их на 1С.

15.04.2024    7215    YA_418728146    14    

65

Языки и среды Программист Стажер 1С v8.3 Бесплатно (free)

Существует множество языков программирования, и каждый имеет свои особенности по работе с типами данных. Слабые, явные, динамические и другие... Но кто же здесь 1С и почему с приходом "строгой" типизации EDT 1С-программистам стоит задуматься над изменением своих привычек.

16.01.2024    10937    SeiOkami    25    

64

Языки и среды Программист Бесплатно (free)

Пример небольшого приложения, с которого можно начать изучать язык программирования Dart.

08.08.2023    5252    acvatoris    6    

15

Языки и среды Программист 1С v8.3 Россия Бесплатно (free)

Написание статического анализатора для 1С традиционным способом на Си.

30.06.2023    4177    prohorp    15    

12

Языки и среды Программист Абонемент ($m)

Поставили нам задачу - вынести на отдельный сервер функционал получения заказов от клиентов по электронной почте, парсинг полученных XLS в приемлемый вид и трансформация заказов в красивый JSON, понятный нашей учетной системе на 1С. Всю эту красоту желательно запустить в отдельном докер - контейнере, по возможности не тратя лицензии, поэтому отдельно стоящую конфигурацию на БСП отвергаем сразу. Можно было бы собрать всё на Apache Airflow или Apache NiFi, но решили попробовать реализовать всю логику без Open Source, будем делать свой ETL, с Исполнителем, который в версии 3.0 научился взаимодействовать с электронной почтой по IMAP. Начнем с середины - сначала напишем скрипты, а потом соберем их в рабочую конструкцию

1 стартмани

01.06.2023    2884    0    kembrik    2    

11

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

Вставки кода на C# внутри кода на 1С.

5 стартмани

07.04.2023    11965    4    SerVer1C    58    

46

Языки и среды Программист 1С v8.3 Бесплатно (free)

При работе с 1С ORM (object relation mapping) все время преследует ощущение постоянного создания монолитного приложения — один раз привязался к какой либо сущности (например, справочник Контрагенты), и весь код заполнен ссылками на эту конкретную реализацию. Можно ли независимо разрабатывать в ORM совместимые между собой справочник «Контрагентов» и использующий его документ «Платежное поручение», но при этом избежать жестких зависимостей? Спасут ли нас микросервисы? Пример на аннотациях Java демонстрирует, как это возможно делать.

13.03.2023    1655    1CUnlimited    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. brr 184 13.07.18 10:01 Сейчас в теме
Плюс, однозначно :). Но...
Слишком простой пример, не приведен код для замены которого используется цепочка обязанностей. Тем кто не знаком с паттерном будет не понятно зачем всё это.
2. l1ike 16.07.18 10:48 Сейчас в теме
А вот объясните пожалуйста, в чем тайный смысл передачи параметров процедуры структурой?
Оставьте свое сообщение