Все кейсы

Кабинет клиента: покупки, отправления, платежи и документы в одном месте

Один кабинет вместо переписки с менеджерами: увидеть, где посылка, оплатить, скачать документ. Один и тот же код обслуживает два разных сервиса — различия лежат в настройках.

Контекст

Клиентам компании нужен один кабинет вместо переписки с менеджерами: увидеть, где посылка, оплатить, скачать документ. Все три публичных сайта из кейса «Экосистема TRT» ведут пользователя именно сюда.

Решение

Кабинет и система учёта говорят на одном языке по определению: описание данных для кабинета собирается из описания системы автоматически, поэтому они не могут разойтись.

Документы и фото грузов хранятся в защищённом хранилище, ссылки на них временные и выдаются только тому, кому положено.

Масштаб — 637 файлов кода.

Как устроено

Один код кабинета обслуживает два сервиса, различия лежат в настройках системы учётаКабинет сервиса отправкисвой бренд · свой набор разделовКабинет сервиса перепосылкитот же код · другие настройкиТретий сервисдобавляется настройкой, без правок в кодеОдин код кабинетапри запуске запрашивает настройки и собирает себя под сервис: разделы, поля, оформлениеСистема учётанастройки сервисов · описание данных, из которого собираются типы кабинетаХранилище файловдокументы и фото грузов · временные ссылкиОдин код кабинета обслуживает два сервиса, различия лежат в настройках системы учётаКабинет сервиса отправкисвой бренд · свой набор разделовКабинет сервиса перепосылкитот же код · другие настройкиТретий сервисдобавляется настройкой, без правок в кодеОдин код кабинетапри запуске запрашивает настройки исобирает себя под сервис: разделы, поля,оформлениеСистема учётанастройки сервисовописание данных, из которого собираютсятипы кабинетаХранилище файловдокументы и фото грузоввременные ссылки

Почему так, а не иначе — один кабинет на два сервиса

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

Мы пошли иначе: код остался один, а различия между сервисами вынесены в настройки, которые кабинет запрашивает у системы при запуске. Приложение узнаёт, каким сервисом оно сейчас является, и собирает себя под него.

Что это дало: третий кабинет добавляется вообще без изменений в коде, только настройкой на стороне системы. Исправление ошибки приезжает во все сервисы сразу.

Что это стоило: настройки становятся частью договорённости между кабинетом и системой, их нужно проверять и версионировать так же строго, как всё остальное. И каждая новая настройка требует ответа на вопрос: это правда различие между сервисами или я прячу в настройки то, что должно быть кодом.

Четвёртое применение одного метода

Конструктор страниц, платформа для отраслевых приложений, процессы в системе учёта и этот кабинет — везде настройка вместо копирования. Это не совпадение, а способ работы.

Другие кейсы

Кейсы и личные проекты