Рубрики
Без рубрики

Как мы использовали силу реактивного программирования преломления

Джо Макграт, как мы использовали силу реактивного программирования с Refracthave, вы когда-либо задавались вопросом, насколько приходят библиотеки с открытым исходным кодом, построенные компании? Мне всегда было интересно это. Они начинаются с намерения создать внутреннюю библиотеку? Является открытым исходным кодом начальной целью? Если ни один,

Автор оригинала: FreeCodeCamp Community Member.

Джо Макграт

Вы когда-нибудь задавались вопросом, как входят библиотеки с открытым исходным кодом, построенные компании?

Мне всегда было интересно это. Они начинаются с намерения создать внутреннюю библиотеку? Является открытым исходным кодом начальной целью? Если ни один, как это происходит вообще? Теперь, когда мне повезло, чтобы увидеть это с самого начала до того, как ощущается делиться историей о том, как Преломлять пришел к существую!

Одна из первых вещей, которые я сделал после принятия Fanduel Предложение о работе было отправлено по электронной почте инженерам, которые опросили меня.

Мой предыдущий работодатель был амбициозным стартапом, работающим над какими-то крутыми идеями, но Фандеуэль был реальным сделом: Tech Unicorn с репутацией одной из лучших компаний в стране. Поскольку у меня был только несколько месяцев опыта работы с реагированием/redux et al, казалось, хорошая идея, чтобы получить голову … поэтому я спросил, что Tech учится.

Среди библиотек и концепций как знакомые, так и незнакомые, одна линия в ответ привлекла мое внимание:

Я слышал о реактивном программировании – именно тот самый сильный, гибкий метод программирования, которую я надеялся научиться. Тем не менее, я знал достаточно об этом, что имя XStream поднял вопросы.

Как правило, сочетание реагирования и реактивного программирования означало наблюдаемое redux, а также наблюдаемое redux, используемые RXJS. Xstream – это альтернатива RXJS. Тот факт, что они использовали XStream, означал либо адаптер, либо какой-то пользовательскую интеграцию.

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

Я не был бы разочарован.

Время для разведки

Есть преимущества и недостатки для начала новой работы в середине декабря. Они усиливаются, если ваша первая неделя бывает халакат.

Было бы некоторое время, прежде чем серьезные работы будут отправлены мой путь, что в моем случае была хорошей вещью. Это означало, что у меня было время исследовать. Один крик моего подхода к изучению состоит в том, что я счастлив поглощать знания и контекст о новой кодовой базе, просто читая код.

Моя главная цель состояла в том, чтобы понять приложение с общей перспективы, но у меня были другие вопросы. Я хотел посмотреть, как они использовали реактивное программирование – и это не заняло много времени, чтобы найти то, что я искал.

Выкапывание нескольких слоев абстракции привело к паре компонентов высшего порядка: с наблюдателями и с работойSSideefeects Отказ

Первый позволил вам соблюдать магазин redux через действия или селекторы. Это было похоже на Aredux-наблюдаемый в концепции, но встроен в реактивный компонент.

Последнее было еще интереснее. Это позволило вам наблюдать, как данные, протекающие через реакцию, что-то, о чем я даже не слышал как возможность.

Эти два обобщенных HOCS сформировали строительные блоки для подбора более специализированных. Каждый из них принял поток данных и выполнил определенный побочный эффект в ответ. Одна пара, чтобы отправить аналитические события, другая пара для отправки в магазин. Еще один для запуска изменений навигации. Это было очевидное ограничение: вы можете наблюдать только один источник одновременно и вызывать только один тип эффекта.

Другой недостаток заключался в том, что у ХОК было очень загадочное API. Чтобы настроить их, вы должны были пройти в вложенные массивы, содержащие списки вещей, которые вы хотели наблюдать, и эффекты, которые вы хотели вызвать в ответ.

В результате эта чрезвычайно мощная особенность не использовалась для его полного потенциала. Идеи за Кодексом показали столько гибкости, но эти недостатки держали его обратно.

Так откуда взялись недостатки? Какие битвы этот код выдержал, прежде чем он пришел, чтобы нести эти шрамы?

Оказывается, код, который я впервые столкнулся, был на самом деле итерацией номер четыре. Каковы были предыдущие итерации, и как они пришли, чтобы пройти?

Многие эоны назад

В 2015 году Fanduel принял решение создать новый продукт для потенциального нового рынка. Он рассматривал как новое начало – шанс попробовать что-то новое, чтобы исследовать потенциальные преимущества. Популярная экосистема React/Redux может предложить над существующим угловым приложением.

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

Первые семена преломления – первая итерация – пришла от каждого абсолютного разработчика Любимый вещь для работы над: аналитикой.

Мы не будем исследовать эту версию здесь, потому что в то время, что Томас писал статья, объясняющая ситуацию что остается хорошо стоит прочитать. Ядро из функций включенных потоков, встроенных в реактивный компонент. Это позволит вам соблюдать действия и селекторы и отправлять данные по аналитикам поставщиков в ответ.

Устойчивый март прогресса

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

Как естественно с такими основными изменениями продукта, уже использованного в масштабе, это будет долгосрочный проект. Во время записи несколько угловых видов остаются в использовании, а некоторые даже более старые унаследованные кода цепляются за жизнь в местах.

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

Вторая итерация преломления будет оставаться потерянным во времени. Цитировать Томас, «Я забыл, и я думаю, что это так лучше».

Третья итерация была похоже на подход, который я впервые столкнулся. Его API было еще сложнее читать, и он все еще был ограничен наблюдающим redux.

Четвертая итерация была большим скачком. Способность наблюдать реактивный реквизит. Незначительные несоответствия были вытянуты. Императивный и декларативный код был разделен на что-то похожее на редукторов Redux и создателям действий.

Эта итерация была стабильна более года. Это доказало свою ценность со временем и считалось зрелой особенностью, к тому времени, когда я присоединился.

Новая идея

Таким образом, преломление началось как какой-то собственный код, считается стабильным, но сложно использовать, построен внутри большого приложения. Как мы превратили это в автономную библиотеку, готовую к использованию более широкого сообщества? Какие шаги были сделаны по пути?

Проект был фактически вызван внешним влиянием. Fanduel часто проходит Эдинбург Рейкт встречи, присутствующие по крайней мере один или два инженера.

В одном встрече, разговор исследовал Redux-наблюдаемый, и он ударил одного из людей, присутствующих только насколько наш код может сделать в сравнении. Мы говорили об этом в течение следующих недель, чувствуя, что это будет что-то остоложенное открытое источник.

На некоторое время ничто не казалось, что произойдет из этих обсуждений. В то время как компания посвящает 10% от каждого времени для профессионального развития, у каждого были другие вещи, над которыми они хотели работать. Кроме того, код казался слишком сложным, чтобы он был проектом, который действительно может добиться успеха.

Это происходит?

Затем, однажды в середине апреля появился новый слабый канал. Цель канала: Обсуждение нового API для побочных эффектов, с планом OSS Отказ Томас опубликовал эскиз нового API, который он имел в виду.

Эскиз был намного проще, чем существующие API. Он сделал разработчик испытать гораздо более чистые и интуитивные и добавлять еще больше гибкости. В течение следующих недель мы обсудили идеи для улучшений, продолжаясь с серьезным бизнесом велосипедов на имя и логотип для проекта.

Некоторое время мы сходили на имя Отдача Не будучи слишком счастливым с этим, но тогда было предложено идеальное имя: Преломлять Отказ Символы были набросаны, а затем последний логотип был завершен. Прогресс!

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

Он извлек существующий код из приложения и настроил его, чтобы соответствовать новой конструкции API. Мы потратили время, чтобы построить некоторые тестовые проекты, итерацию по деталям, а затем написать документацию и примеры. Мы разбили идею нашего CTO и других руководителей, набираем одобрение от ряда ключевых заинтересованных сторон.

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

Мы опубликовали версию одну из преломления в конце августа 2018 года, после некоторое время использовали ее, и это была радость работать с. Но, как с лучшими историями происхождения, конец – это просто начало чего-то более.

Новая цель

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

Это уже не просто библиотека для изоляции побочных эффектов от вашей синхронной логики. Теперь это позволяет Создайте свое приложение React, используя реактивное программирование Отказ Это имеет огромные последствия для того, как мы могли бы структурировать наши приложения в будущем.

Но это лучше, чтобы быть исследованным в другой раз.

На данный момент, если вы хотите узнать больше, Проверьте нашу документацию и наши многочисленные Примеры живого кода !

Присоединяйтесь к нам в нашем #refract Канал на Reactiflux DiscoD Server Если у вас есть какие-либо вопросы или отзывы, или просто поговорить о том, как вы хотите использовать библиотеку. Мы с нетерпением ждем ответа от вас!

Преломлять – документация Используйте силу реактивного программирования, чтобы перезарядить свои компоненты Refruct.js.org