Новое универсальное API
Table of Contents
Данный раздел посвящен принципиально новому подходу для работы с основными CRM сущностями. В рамках реализации Смарт-процессов разработчики решили не просто реализовать новые возможности, но так же и переосмыслить старые идеи. В основе нового подхода лежит реализация дополнительных требований:
- Уменьшение дублирования кода.
- Уменьшение связности классов.
- Покрытие тестами.
Совершенно очевидно, что сложность в изучении модуля возросла многократно, однако это компенсируется единообразием. Планируется что изучив общий подход разработчик сможет по образу и подобию работать и с другими сущностями CRM.
На момент написания раздела механизм используется для сущностей смарт-процессы, счета и предложение. Поддержка остальных сущностей является экспериментальной. Что это значит? Сейчас поддержка нового API является добровольной и работает в пилотном режиме, но в будущем, когда все несовместимости будут устранены этот механизм будет включен для всех сущностей принудительно, а старое поведение будет убрано из продукта.
Концепция
В основу нового api заложены такие паттерны как: локатор сервисов, абстрактная фабрика, фабрика, фасад и одиночка (singleton), поэтому крайне желательно быть с ними знакомым.
Точкой входа в весь механизм является контейнер - это singleton-класс который с одной стороны обеспечивает простой доступ к сервисам из локатора сервисов, а с другой стороны является абстрактной фабрикой для фабрик по работе с сущностями.
Мы употребили много не совсем очевидных слов поэтому давайте немного разберемся в терминологии.
Сервис - объект, как правило, в единственном экземпляре, который выполняет небольшую обособленную часть логики. Поскольку они строго следуют принципу единой ответственности в модуле crm их довольно много. В продукте используется большое количество сервисов и ознакомиться с ними вы сможете в документации по продукту (см. полезные ссылки).
Фабрика по работе с сущностью это класс для определенной сущности, который описывает некоторую специфичную для конкретного типа особенности - например набор полей, поведение и прочее.
Здесь и далее под словом “тип” подразумевается “тип сущности в рамках CRM”, например “Лид”, “Сделка” и т.д. К ним же относятся “Смарт-процессы”.
Нам с вами известно, что каждая сущность имеет свои особенности работы и что нельзя просто так изменить строчку в базе данных - сохранение это сложная операция, которая затрагивает различные действия. Поэтому в продукте появилась принципиально новая механика - Операция. Это конфигурируемый класс, который содержит обработчики всей логики для выполнения определенного действия.
Давайте разберемся на примере - наша задача изменить существующую сделку. Идентификатор сделки известен, изменяемые поля и новые значения нам известны. Что нам нужно сделать?
- Из контейнера получить фабрику по работе с сущностью.
- Из фабрики по работе с сущностью получить изменяемый элемент (объект элемента).
- Изменить необходимые поля элемента.
- Из фабрики по работе с сущностью получить операцию изменения.
- Передать в операцию изменения уже измененный элемент.
- Запустить операцию изменения.
Полезные ссылки
Новое API в документации 1С-Битрикс Локатор сервисов Сервисы