-
Notifications
You must be signed in to change notification settings - Fork 0
Работа с UI
Здесь собраны практические примеры и указания по работе с пользовательским интерфейсом — UI.
UI в контексте системы представляет собой набор модулей, берущих на себя обязанности рендера компонентов, наполняющих систему.
- Пакеты в
ui
не должны содержать бизнес-логики - Пакеты в
ui
не должны быть прибиты гвоздями к какому-то конкретному месту на проекте
UI
- довольно большая часть системы.
Если при работе над бизнес частью вам необходимо внести те или иные правки в тот или иной пакет в UI
важно помнить, что любое ваше изменение может сломать обратную совместимость с этим пакетом во всех остальных местах на проекте.
Написать форму, отправляющую данные на бэкенд
Создаем пакет @ui/form
, внутри которого отрисовываем форму и добавляем action, где отправляем данные из формы на бэкенд.
Отправка данных на бэкенд в том или ином виде относится к бизнес части. Это вне скоупа ui
, соответственно должно быть реализовано снаружи.
Открываем пакет @ui/form
для конфигурации снаружи: даем возможность указать action
, который должен исполняться при нажатии на кнопку. Сам action
будем хранить во фрагменте.
Форму можно переиспользовать и не нарушена зона ответственности UI, @ui/form
будет отвечать только за рендер, как и планировалось
Задача: Сделать модальное окно, оповещающее пользователя об ошибке
Реализация: Создаем пакет @ui/modal
, внутри которого верстаем наше модальное окно и выводим его во фрагменте.
Ошибка: Мы замкнули пакет @ui/modal
на одном месте на проекте. Если в будущем у нас появится задача сделать модальное окно для обратной связи — нам придется лезть в @ui/modal
и верстать там новое окно.
Плюс это противоречит пункту 1: наполнение модального окна относится к бизнесу, а не к ui.
Модальному окну должно быть все равно что в нее кладут.
Реализация v2: Ограничим зону ответственности модального окна до этапа отрисовки контейнера, появляющегося над страницей. Наполнять этот контейнер с версткой мы будем уже снаружи.
Теперь, когда мы имеем представление о том, что такое ui
- перейдем к протоколу работы с этим скоупом.
Разберем основные случаи, в которых вам может потребоваться вносить правки в этом скоупе:
Сразу перейду к главному: так как пакет новый — значит нигде не используется, а значит и ломаться нечему.
Это так, но тем не менее, процесс создания пакета в ui
требует особого внимания к деталям:
-
Всегда руководствуйтесь SOLID. Если понимать эти принципы — про пункты из блока
Что такое ui?
можно забыть, это можно расценивать как примеры применения этих принципов. -
Если пока ничего не понятно про SOLID — смотрим первые 2 пункта в блоке
Что такое ui?
, и следим за тем, чтобы ваш новый пакет им не противоречил. -
Всегда типизируйте. Описывайте входные параметры у функций/компонентов и поменьше используйте
any
(а лучше вообще от него отказаться).
Это уже более опасный случай, так как ваши правки потенциально могут сломать обратную совместимость в куче мест на проекте.
Чтобы удостовериться в том, что ваши правки имеют место быть и что поломка обратной совместимости допустима, сверяйтесь со следующим алгоритмом:
Для начала стоит отметить, что поломка обратной совместимости может проявляться по-разному.
Если вы каким-либо образом внесли правки в API пакета — все несоответствия по проекту выявит команда yarn typecheck
.
Если ваши правки не изменили API — вам обязательно стоит проверить рендер этого компонента там, где он используется. Возможно после правок компонент стал выглядеть некорректно, а это можно проверить только самостоятельно.
Так как ответить на этот вопрос самостоятельно у вас вряд ли выйдет — уже на этом этапе стоит обратиться к старшему в команде:
- Объясните свою потребность
- Укажите на существующий пакет в
ui
, - Объясните, почему текущая реализация пакета не может предоставить вам то, что вам нужно
- Расскажите, как вы видите себе модифицированный пакет
После этого можно будет вынести окончательный вердикт о том, стоит править ui
или нет.
-
ДА — тогда стоит трижды задуматься о последствиях. Если осознать их в полной мере у вас не выходит или вы все еще по какой-то причине сомневаетесь — обращайтесь к старшему по команде.
Если вы готовы к последствиям — вносите правки в ui, делайте коммит, в коммит месседже обязательно укажите блок
BREAKING CHANGES
, в котором укажите изменения, ломающие обратную совместимость. После этого коммита начинайте поправлять обратную совместимость по проекту, а по окончании так же сделайте коммит. -
НЕТ — еще раз проверьте правки на наличие антипаттернов и можете их вносить.
Удачи!