Skip to content

Instantly share code, notes, and snippets.

@yury-egorenkov
Last active April 19, 2016 13:37
Show Gist options
  • Save yury-egorenkov/7de328fc58a8e62e69cd0170b01bfeee to your computer and use it in GitHub Desktop.
Save yury-egorenkov/7de328fc58a8e62e69cd0170b01bfeee to your computer and use it in GitHub Desktop.
prax doc
|| Prax это о том, почему это будет удобно программисту.
|| Можно ехать и на дрезине, но на мерседесе лучше.

Prax является основой для создания высококачественных динамических веб приложений, код которых остается простым для понимания и внесения изменений с ростом количества и сложности функций. Одной из основных причин замедления скорости разработки, снижения качества кода, увеличения регрессий является сложность контекста, который необходимо загрузить в голову программисту, что бы работать над кодом приложения. Под контекстом мы понимаем взаимосвязанность компонентов системы, осознание влияния их внутренних состояний на поведение, запоминание их интерфейсов. Переключение контекста между различными частями проекта так же отнимает меняльную энергию и занимает продолжительное время. Все это создает incidental complexity, которая экспоненциально растет с развитием проекта. Нелинейно увеличивается количество взаимосвязей между модулями, общее состояние проекта (сумма всех состояний всех модулей) размазана по системе. Для отладки какого-либо перехода из состояния - в состояние необходимо длительное “прокликивание”, что бы перевести систему в требуемое начальное состояние.

Использование prax приводит к линейному нарастанию сложности базы кода при добавлении новых features, заставляя их как бы втыкаться в уже существующую и структуру, не затрагивая другие features. При таком подходе feature можно полностью удалить из приложения удалением одного или нескольких файлов.

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

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

  • Declarative vs Imperative Формулировка определений вместо порядка действий

  • Functional programming

  • Pure function

Архитектура и как ей пользоваться

Unidirectional flow - почему это хорошо |server -> reducers -> state -> UI -> effects |^ ^ | || |--------------------------| |---------------------------------------|

Single immutable state - почему это хорошо State as pure structure - почему это хорошо Stay with data - все умеют работать с данными map, reduce

Reactive app Приложение - можно представить приложение, как набор шестеренок, которые зацеплены друг за друга, но сами не крутятся. Ручка, которая приводит их в движение находится во внешнем мире. Таким образом шестеренки поворачиваются только в ответ на какое-то внешнее событие. Можно так же представить приложение, как набор связанных трубок, но воды в них нет. Когда вода пойдет приложение не знает. Таймер, который может создавать события внутри приложения в таком подходе тоже является частью внешнего мира.

Reactive views UI = ƒ(state)

Isolated side-effects Main loop - как точка втыкания функциональности Compute as Excel для вычисления данных Hot replace

  • Getting started

  • Simple chat example ✘ message send - recieve anonymously ✘ user name and auth ✘ yell @user ✘ delivered - seen ✘ rooms - private ✘ image, video snippet at post ✘ quote message ✘ share message - room

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment