Разделение

Описание

Храните информацию по каждому бизнес-объекту в отдельном каталоге

Паттерн разделения рекомендует хранить каждый бизнес-объект системы в отдельном каталоге.

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

В одном каталоге информация по двум бизнес-объектам
В одном каталоге информация по одному бизнес-объекту

Выделение бизнес-объектов в отдельный каталог позволяет повторно использовать их во многих записях системы. При этом каждый экземпляр бизнес-объекта (запись) содержит уникальную для него информацию.

Такая реализация позволяет структурировать все данные в системе: избавляет от необходимости повторного заполнения данных и позволяет настроить связи между различными объектами.

Паттерн разделения не противоречит паттерну слияния и должен использоваться совместно с ним. Разделение описывает необходимость формирование отдельного каталога под каждый бизнес-объект, а слияние — уменьшение списка бизнес-объектов в системе.

Проблематика

Рассмотрим настроенный процесс учета клиентов, реализованный без учета паттерна разделения.

В системе настроен каталог “Клиенты”:

В настроенном каталоге фиксируется информация по двум бизнес-объектам:

КлиентКонтактное лицо

Наименование

ФИО

Статус

Телефон

Комментарии

Email

Создано

Создал

Нарушение паттерна разделения может привести к следующим проблемам:

  • Невозможность множественных связей

  • Дублирование информации между записями

  • Необходимость множественной актуализации

Невозможность множественных связей

В рассмотренном выше примере для каждого клиента возможно указать только одно контактное лицо. Таким образом, если у клиента есть несколько контактов, то в записи не удастся указать их все.

Проблема может решаться добавлением новых полей в каталог (ФИО 1, ФИО 2 и так далее), но в таком случае при каждом новом увеличении максимального числа контактов будет необходимо добавлять новые поля в каталог.

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

Дублирование информации между записями

В общем случае один экземпляр бизнес-объекта может быть указан сразу в нескольких записях. В контексте рассматриваемого примера такое может быть, если одно контактное лицо присутствует сразу у двух или более клиентов.

Таким образом информация контактного лица будет дублироваться между записями разных клиентов: для каждого клиента с тем же контактом нужно повторно заполнять поля, относящиеся к контакту (ФИО, Телефон, Email).

Подобный подход увеличивает время на заполнение карточки и может привести к ошибочному вводу данных. Например, если во второй записи клиента с этим же контактным лицом будет неверно указан адрес электронной почты.

Необходимость множественной актуализации

Если часть полей экземпляра бизнес-объекта была изменена, то необходимо актуализировать информацию во всех записях, где он указан.

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

Подобная актуализация требует дополнительного времени на ручное изменение или написание автоматизации.

Применение паттерна

Рассмотрим реализацию того же функционала учета клиентом с учетом паттерна разделения.

Запись каталога “Клиенты”:

В поле "Контакты" каталога "Клиенты" выведены расширенные поля с ФИО, телефоном и почтой контактного лица для большей наглядности

Запись каталога “Контактные лица”:

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

Если это же контактное лицо нужно указать у другого клиента, то достаточно выбрать уже существующую запись из выпадающего списка:

Изменить данные контактного лица можно в его записи. При этом, так как контактное лицо в “Клиентах” фигурирует в качестве связанной записи, то из каждой записи “Клиента” можно увидеть актуальные данные.

Last updated