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

22.06.18

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

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

Скачать файл

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

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

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С v8.3 Бесплатно (free)

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

15.04.2024    4060    YA_418728146    13    

62

Мобильная разработка Языки и среды 1С:Элемент Программист Бесплатно (free)

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

19.03.2024    18410    ROk_dev    74    

43

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

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

16.01.2024    7358    SeiOkami    25    

61

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

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

08.08.2023    4213    acvatoris    6    

15

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

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

30.06.2023    3503    prohorp    15    

12

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

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

1 стартмани

01.06.2023    2316    0    kembrik    2    

7

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

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

7 стартмани

07.04.2023    10576    4    SerVer1C    58    

45

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

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

13.03.2023    1308    1CUnlimited    0    

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