Поднимая атом, подход 2.0.1

    Не прошло и года, вторая статья около тем реактивности данных. Цель текущего цикла разработки, разобраться в понятиях и зафиксировать API библиотеки. Мне, как автору стремящемуся к полиглотизму, стало фиолетово на способы описания ручек.
    — Да и вообще, в Матрице слишком много информации, чтобы ее декодировать.
    Надо просто привыкнуть.
    Я вообще не вижу кода.
    Вижу блондинку, брюнетку, рыжую.

    image

    Итак, представляю alak 2.0.1-RC


    Согласно моей карте знания области функционального программирования, базовая частица библиотеки по прежнему остаётся функтором раскаченной до монады (и наоборот если взглядом древнегреческих философов). Карта никогда не станет территорией, и в текущей реинкарнации решено выйти из этого дремучего-леса/диких-джунглей функциональной терминологии и подготовить документацию на родном, человеческом языке.

    Для генерации документации попробовал documenter пакета api-extractor от microsoft, упаковав полученный маркдаун в docusaurus от facebook.

    Вот что получилось: alak.now.sh

    Оптимальным кажется генерировать статику для сайта документации на свой вкус из json полученным от api-extractor. Docusaurus и documenter несут с собой некие клеше и монструозность корпоративного подхода к разработке. Всё можно сильно легче и краше, прошлось добавить несколько промежуточных трансформаций для компактности сайта.

    Кирпич для TypeScript


    Работу ядра прошлых версии библиотеки обеспечивал Proxy. После замеров производительности в сравнении с __proto__ разница оказалась небольшой. Оба решения достаточны быстрые и экономные по памяти. Решение текущей версии по умолчанию стартует на __proto__. Использование прототипов в тайпскрипте безжалостно кидает в сторону создания классов, чья производительность ощутимо ниже. Как и enum сперва казалось классным решением, а ныне использую просто константу или типизированные строки из-за неочевидности поведения enum при сериализации. Люблю дженерики и отношусь к авторам считающим правила C# (под что косят официальные документации TS) излишними в JS мире. Видел много ругани в сторону typescript за тип any, считаю именно существование этого типа делает js-код на typescript великим. (снова))

    noImplicitAny:false

    Обычно подобное приходится класть в конфиг из-за необходимости отучать TS быть похожим на C#. Типы и дженерики для JS, имхо, не должны подтягивать новую философию. Тем не менее библиотека стремится на 100% соответствовать стандартом TS. Обещаю добавить тестирование типов по всей строгости. Сейчас тестируются скомпилированные js-бандлы, так показалось лучше.

    Так что за… Алак?


    Может кто помнит пост от 1 сентября 2014 года Атом — минимальный кирпичик реактивного приложения. Алак это атом версии 2020 года, применяемый на боевых JS проектах для создания различных MV* (в основном MVVM) паттернов проектирования. Поскольку это достаточно легковесное и быстрое решение, нашлось применение и на сервере для управления сокетами, сессиями и пользователями. Уже года 4 вынашиваю что-то вроде спринга для простой и сложной логики на основе атома, об этом возможно в другой раз. А сейчас, предлагаю познакомится с управлением состоянием копонента за его пределами из любой точки вселенной вашего кода.

    Пример на codesandbox

    Очень часто не нужно подтягивать какой-либо крутой стор.
    Берём атом, хук, логику и готово.

    Однажды делал большой проект на vue2, и пробовал поделится кодом своего большого и крутого стора для vue, даже получил 15 звёздочек от китайцев. Но на следующем большом vue проекте, стор изменился концептуально, а сейчас пошли проекты на jsx с хуками. В основе всегда использовал эту реактивную частицу. Такая альтернатива на поколение опережает шину событий, паттерн наблюдатель, и другие библиотеки связи модуля А с модулем/компоненом B.

    Бла-бла спагетти
    Лет так 12 назад во времена расцвета ActionScript, MVC и инверсии зависимостей. Гуру-флэшеры с негодованием смотрели на MVC-библиотеки, утверждая какое-либо отсутствие всякой необходимости в них. Вопреки советам старших, получив очередной новый большой проект в качестве лида, стал делать его на крутой либе — mvcExpress. Начало было классным, а спустя год, следуя всем канонам, код всё равно превратился в подобие спагетти.

    Такова бизнес-логика, её важно уметь готовить. Иной раз действительно лучше всего может подойти mobx или effector. Воще это дело вкуса. Но повторюсь, важно уметь готовить бизнес-логику а не канонический redux. Всё же мы пишем софт для заказчика/пользователей, и бывает нужно именно логическое спагетти несовместимое с существующими решениями.

    Возможно опыт использования готовых сторов необходим для понимания принципа необходимости отделения отображения от данных. Это как шутили раньше что каждый флешер должен сделать свой видео-проигрыватель, (а ещё раньше каждый программист должен написать свой язык с компилятором). Сейчас видимо каждый фронтовик должен сделать свой стор. Вероятно по этому я не спешу делится своим стором, он меняется от проекта к проекту. Свой вклад в сообщество продолжаю вносить в таком формате. Делюсь лучим что есть в моём js-коде.


    Быть или не быть?


    С прошлой статьи вроде учтены всё возникшие конфузы читателей. Сейчас не должно возникать вопросов о ручках API, что такое up и down. Названия постарался сделать максимально отражающими суть действия, документация на русском доступна во всех IDE и codesandbox из авто-подсказок.


    Первая версия не задалось, второй ещё нет.
    Как проверить готовность версии?
    Чего не хватает?

    Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

    Что делать?

    • 12,5%Just Do IT!1
    • 50,0%Спрячь стыд, (удали репозиторий)4
    • 12,5%Нужны хуки/интеграция с vue/react/svetle…1
    • 0,0%Допилить логирование с визуализацией0
    • 25,0%Больше примеров использования и документации2
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 0

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое