Created
April 19, 2016 13:01
-
-
Save yury-egorenkov/c492f691cdde20350f3ea5b979244195 to your computer and use it in GitHub Desktop.
prax doc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|| 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