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

22.06.18

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

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

Скачать файлы

Наименование Файл Версия Размер
Принципы ООП в 1С (pattern Chain of responsibility):
.zip 10,62Kb
2
.zip 10,62Kb 2 Скачать

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С

См. также

Зачем нам 1С:Элемент

Мобильная разработка Языки и среды Бесплатно (free)

Flutter может быть использован с 1С:Предприятием для разработки кроссплатформенных мобильных приложений, обеспечивая единый интерфейс и функциональность на устройствах под управлением iOS и Android. Это позволяет создавать приложения с высокой производительностью благодаря использованию собственного движка рендеринга Flutter. Интеграция Flutter с 1С:Предприятием позволяет создавать мобильные приложения любого уровня сложности, интегрировать их в корпоративные информационные системы, а также реализовывать бизнес-логику

19.03.2024    6854    ROk_dev    56    

37

(Не) Строгая типизация 1С

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

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

16.01.2024    4218    SeiOkami    21    

55

Простое приложение на Dart

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

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

08.08.2023    3192    acvatoris    6    

13

Статический анализатор кода 1С на Си

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

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

30.06.2023    2982    prohorp    15    

12

Сквозная задача на Исполнителе - часть первая (IMAP)

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

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

1 стартмани

01.06.2023    1894    0    kembrik    2    

7

1С# - Расширяем код 1С кодом на C#

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

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

7 стартмани

07.04.2023    9286    4    SerVer1C    56    

43

Независимая разработка совместимых компонент на ORM 1С – миф или истина где-то в аннотациях Java?

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

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

13.03.2023    1024    1CUnlimited    0    

2

xPath в 1С

Файловый обмен (TXT, XML, DBF), FTP Языки и среды Платформа 1С v8.3 Бесплатно (free)

Опыт работы методами языка xPath в 1С.

04.03.2023    4935    DemetrKlim    40    

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