Полностью согласен, Redux и другие фреймворки, вдохновленные архитектурой Elm, помогут вам разделить код. Отделение управления состоянием от просмотра деталей реализации. Это упрощает поддержку, потому что легче узнать, где искать ошибки, и меньше путаницы между данными, которые вы храните, и тем, как они просто так отображаются в HTML.
Забавно, как много людей из React поняли, что все должно быть смешано. Хотя это имеет смысл для небольших вещей (я большой поклонник упрощения вещей до тех пор, пока это не причинит вам боль), смешивание двух разных проблем со временем будет становиться все более и более проблематичным.
Однако есть проблема. В динамически типизированном коде у вас нет никакого способа узнать, работает ли код одного файла с другим, за исключением тестов. Тесты — это здорово, но их намного сложнее поддерживать, чем определение типа. Нужно писать один интеграционный тест каждый раз, когда два модуля соединяются вместе, чтобы получить ту же гарантию, которую может дать вам однострочная сигнатура типа. Да, вы можете тестировать даже больше, чем вы можете написать типы, однако с богатой системой типов вы можете проверить удивительное количество!
Системы типов действительно хорошо проверяют, правильно ли используется функция одного файла в каждом другом файле. Даже если это сотни. Он масштабируется намного лучше. Не только это, но и статическая типизация позволяет вам изменить API библиотеки и мгновенно узнать на 100%, будут ли файлы повреждены из-за этого изменения. Тесты будут касаться только тех, которые вы написали, а также требуют обновления множества тестов, которые никто не хочет делать.
В конечном счете, я чувствую, что Elm лучше, чем Redux, потому что его система типов помогает сохранять представление и состояние/побочные эффекты разделенными, но хорошо скоординированными.
Это также позволяет вам легко создавать неизменяемые и инкапсулированные структуры данных (называемые непрозрачными типами), которые помогают изолировать представление от того, как представлено состояние. Что-то, чего я никогда не видел в коде Redux.
Typescript и Purescript также являются хорошими вариантами. Я просто предпочитаю Elm, потому что у него хорошее соотношение того, насколько он прост, и надеюсь, что вы получите большую безопасность.