Когда функциональное программирование это хорошо, правильно и нужно
Timofey Aksenov
Front End DeveloperСовсем недавно я закончил писать код очень большого модуля со складским учетом готовой продукции.
В процессе написания, мне очень хорошо запомнился один момент, а именно: установка бейджика со статусом для коробки, паллеты, партии с готовой продукцией. Один и тот же объект в бизнес-логике складского учета может иметь различные статусы, которые отображаются в таблице с итоговыми выборками. С бекенда я получал только статусы в виде строк IN_PARTY
и номера этих самых партий, которые преобразовывал в человекочитаемый вид. Например: В коробке
, В партии
, В партии: №2
, В паллете
, В паллете: №6
.
Код первоначальной версии:
Когда я прототипировал и готовил первоначальную версию кода, меня совершенно не смутила вот эта часть кода:
Здесь логика размазывается по множеству мест JSX-разметки, где необходимо получить человекочитаемый статус.
Вдоволь настрадавшись с установкой статусов и хорошо усвоив для себя, что подобное размазывание логики не ведет ни к чему хорошему, я поставил у себя в голове пунктик о том, что мне необходимо решение данной проблемы.
И о чудо! Решение нашлось в самом неожиданном месте: на досуге я смотрел доклад по ЯП elixir и обратил внимание на оператор пайпа в данном языке |>
. Это натолкнуло меня на мысль, что мне для решения моей проблемы с размазанной по шаблонам логикой поможет функциональное программирование.
Сказано, сделано. Я открыл гайд по ФП в js , Lodash FP Guide и быстро выяснил, что для решения моей проблемы подойдет lodash метод _.flow([funcs])
, который по сути реализует пайп или выполнение функций слева на право
Код итоговой версии:
Код реализации хелперов, устанавливающих человекочитаемые статусы
В результате, получен хорошо задокументированный, удобный для понимания, легко расширяемый код хелпера по установке человекочитаемых статусов для объектов с готовой продукцией.
И программисты рады, и котики рады! 🐱