Зачем это надо.
Часто разработка ведется от бизнес-целей и единственной ценностью продукта признается величина и качество решения только задач бизнеса. А интерес к техническому совершенству и качественной архитектуре проходит мимо. Как итог получаем трудно и затратно модифицируемые, сложноподдерживаемые монолитные решения, не предполагающие повторного использования разработанного функционала. При помощи использования стандартных шаблонов проектирования кажется это можно значительно изменить. Необходимы инструменты применения.
Немного теории.
Выдержки из Вики
Шаблоны проектирования - повторяемая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста
Стратегия - поведенческий шаблон проектирования, предназначенный для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости.
Адаптер - структурный шаблон проектирования, предназначенный для организации использования функций объекта, недоступного для модификации, через специально созданный интерфейс. Другими словами — это структурный паттерн проектирования, который позволяет объектам с несовместимыми интерфейсами работать вместе.
Идея расширения.
Создаем управление выбора обработки реализации алгоритма (адаптера) в зависимости от функционального блока и контекста выполнения.
Схема выполнения:
Что дает применение.
В режиме клиента
- Простую взаимозаменяемость алгоритмов в рамках функционального блока
- Модульность системы
В режиме разработки
Как следствие разделения разработки на создание интерфейса и самой реализации
- Простота поддержки и модификации, как следствие естественного разделения кода на отдельные функциональные блоки, выполняющие свои и только свои функции.
- Возможность назначить разработку интерфейса, как ответственной части более компетентным сотрудникам. Отдельная реализация, выделенная в отдельную обработку поддается более простому контролю.
- Естественным образом избавляемся от мегамодулей неясного назначения помеченных обычно "ОбщегоНазначения"
- Точка разрыва для написания модульных тестов - после интерфейса, но до реализации
- Повторное использования разработанного функционала - поскольку каждый функциональный блок должен делать только свое.
Техническая реализация.
Расширение для 1С версии >= 8.3.9, не требует изменений в конфигурации. Реализациями алгоритмов (адаптерами) могут быть как встроенные, так и внешние обработки.
Храним функциональные блоки как виды адаптеров, контексты выполнения как регионы использования. На основании переданных вида и региона возвращаем назначенную обработку реализации алгоритма, при отсутствии настройки для вида+региона возвращаем обработку реализации алгоритма по-умолчанию.
Приложена тестовая база с реализацией загрузки данных из разнородных источников для контрагентов
Создание адаптеров.
В обработках адаптеров требуется реализация общего интерфейса, реализованного в обработке расширения "ом_АдаптерШаблон"
Управление адаптерами.
Кроме программного интерфейса есть общая обработка "ОМ. Управление адаптерами", позволяющая назначать активные адаптеры для регионов использования, изменять состав зарегистрированных адаптеров:
В архиве сборка расширения и каркасный пример загрузки разнородных файлов для контрагентов.