# Унификация

## Описание

{% hint style="success" %}
Называйте идентичные по смыслу поля и их значения в разных каталогах одинаково.
{% endhint %}

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

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

<mark style="color:red;">Вместо таких наименований:</mark>                                          <mark style="color:green;">Используйте такие:</mark>

| Запросы         | Задачи        | Запросы       | Задачи        |
| --------------- | ------------- | ------------- | ------------- |
| Этап            | Статус        | Статус        | Статус        |
| Детализация     | Описание      | Описание      | Описание      |
| Срок выполнения | Дедлайн       | Дедлайн       | Дедлайн       |
| Проверяющий     | Ответственный | Ответственный | Ответственный |



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

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

Так выглядит карточка запроса, при проектировании которого паттерн унификации не соблюдался:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2F2gBt8Wgg7JR10qc7cZCr%2F1.png?alt=media&#x26;token=68fde178-d792-4f3d-875e-21368992b3cb" alt=""><figcaption></figcaption></figure>

Следствием несоблюдения _паттерна унификации_ могут быть следующие проблемы:

* Неочевидная фильтрация записей в каталогах
* Отсутствие единой терминологии у сотрудников

### Неочевидная фильтрация записей в каталогах

Из-за несоответствия наименований полей в каталогах значительно усложняется процесс фильтрации записей из панели фильтров: увеличивается время для поиска нужного поля и его значения.

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

При настройке фильтров в каталоге “Задачи” проблем нет — находим поле “Статус” и проставляем в него значение “Новая”:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2FjFY9hdOXGeLNvdsP6jk5%2F2.png?alt=media&#x26;token=be421ee0-75b3-4fee-9c28-e0d8ac52c3f7" alt=""><figcaption></figcaption></figure>

При настройке аналогичных фильтров в каталоге “Запросы” сталкиваемся с проблемой: в каталоге нет поля “Статус”.

Путем проведения аналогии понимаем, что за определение статуса запроса отвечает поле “Этап”.

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2FqYkVfKN3afUbLPO4UkJO%2F3.png?alt=media&#x26;token=14566b7c-8819-4d57-8219-61c15aa08d88" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2Fr4E7LtjFKq9cfGdelbUK%2F4.png?alt=media&#x26;token=ada98ac4-3310-4124-a56d-23fc7d95ebbc" alt=""><figcaption></figcaption></figure>

Через сопоставление полей с “Задачами” понимаем, что значению “Новая” из каталога “Задачи” соответствует значение “Создан” из каталога “Запросы”. При этом на сам процесс сопоставления наименований между каталогами затрачено некоторое время.

С увеличением каталогов и полей в системе ситуация обостряется: найти нужное поле в панели фильтров становится сложнее.

### Отсутствие единой терминологии у сотрудников

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

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

Один из сотрудников знает, что такое “Статус”, но не понимает, что такое “Этап” и наоборот.

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

Следствием проблемы расширяющейся терминологии также является обучение новых сотрудников. Вместо того, чтобы быстро “влиться” в рабочий процесс новый сотрудник будет путаться в обилии всех терминов, которые используются в системе.

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

Рассмотрим эту же систему спроектированную с использованием паттерна унификации. Теперь карточка “Запроса” выглядит следующим образом:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2FAlKZ4QTFTaXjHS294NwW%2F5.png?alt=media&#x26;token=11509476-6595-4ab0-9e77-22037bf12221" alt=""><figcaption></figcaption></figure>

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

Так выглядит фильтрация в каталоге “Задачи”:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2FYWofKcqtUx1CJeAJsCtd%2F6.png?alt=media&#x26;token=b576d28b-df25-4f6c-be19-721d607df02e" alt=""><figcaption></figcaption></figure>

И практически идентично выглядит фильтрация в каталоге “Запросы”:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2FvafU1rpRdYWSAPFZgiZh%2F7.png?alt=media&#x26;token=b665d490-0b58-4dd5-89d5-2c40e11ecba3" alt=""><figcaption></figcaption></figure>

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

Также решена и проблема с отсутствием единой терминологии. Все сотрудники работающие в системе понимают, что такое “Статус”, потому что они сами регулярно сталкиваются с этим термином в своей работе.
