React+Redux VS Backbone (Marionette) в 2017?

Как человеку, который пришел с back-end, мне ближе четкие MVC архитектуры и Backbone это то, что мне близко. Но! Я отчетливо понимаю, что с React, построение UI (построение DOM) превращается в простую и понятную схему, где Фреймворк берет большую часть на себя и не нужно писать все руками как в случаи с Backbone.View.

Есть рад вопросов, которые заставляют вновь и вновь оглядываться на Backbone. Поэтому обращаюсь к вам и надеюсь, вы расставить для меня все по полкам.

  1. Коллекции. В Backbone есть понятные коллекции (набор моделей) с которыми очень удобно работать. Поиск, фильтрации и множество функций от underscore, которые очень нужны, когда работаешь с данными. Понятно, что React это только View. Берем Redux, но все ровно там нет полноценного функционала работы с коллекциями. Как бы коллекция – простой объект и обрабатывай их стандартными средствами.
  2. Расширяемость. React на продакшине – это «один» скомпилированный файл. Допустим у меня большое приложение и мне не нужно грузить редактор текста при заходе на главную страницу. В случаи с Backbone я могу взять RequireJS разбить все приложение на компоненты и грузить нужный компонент по ходу, асинхронно. По подобию как сделано в ВК. Скрипт, отвечающий за отображение фотографий, подгружается только тогда, когда пользователь кликнет на фото. Как я понял, в React такого нет. Надеюсь, вы поправите меня.
  3. Сообщество. Т.к. Backbone напрямую работает с jquery, появляется огромная база плагинов для всех случаев жизни. От wysiwyg редакторов до модальных окон и валидаций форм. Соответственно их можно грузить асинхронно с помощью RequireJS, как описано выше. React молодой фреймворк и далеко не для всех моих задач найдется готовое решение. А это время=деньги чтобы писать все вручную.


Я понимаю разницу между этими двумя Фреймворками, но вот эта пара тройка вопросов засела в голове. Надеюсь, сюда придут настоящие адепты React и направят меня на путь истинный.

Или все же есть смысл смотреть на Backbone (Marionette) в 2017?
  • Вопрос задан
  • 3320 просмотров
Решения вопроса 3
AppFA
@AppFA
Frontend developer at Yandex
React это не фреймворк, а лишь либа для view
1. Никто не запрещает использовать lodash\underscore для работы с данными. Для фильтрации\поиска используйте селекторы.
2. Используйте webpack для сборки проекта, в настоящее время это единственное рабочее решение, так же в webpack есть асинхронная загрузка модулей - require.ensure, так что вы спокойно можете разбивать свое приложение на чанки и подгружать их в нужный момент.
3. По-моему сейчас очень, очень много плагинов адаптированных под реакт, за не большую практику работы с этим стеком у меня ни разу не возникло необходимости писать что-то самому с 0, всегда можно найти какое-то решение, форкнуть и допилить под себя.

По поводу backbone, честно не знаю - на мой взгляд React более лаконичен и на нем можно быстрее начать писать уже готовое приложение + при правильной архитектуре проекта поддержка в будущем будет без боли.
Ответ написан
Комментировать
maxfarseer
@maxfarseer
https://maxpfrontend.ru, обучаю реакту и компании
1. Поясните этот момент. Поиск, фильтрация... это же обычные операции на vanila js? Спокойно обрабатывайте ваши данные в reducer'ах, хоть с помощью underscore, хоть с помощью lo-dash...
2. Разделение кода возможно. Так как за сборку отвечает обычно webpack, начать можно с небольшого теоретического экскурса здесь: Кантор (ру) (гугл, подкидывает еще (англ.))
3. Не мало всего уже есть, но конечно меньше.

Направлять вас на путь истинный вряд ли нужно: у вас есть задачи, решайте их так как умеете и зарабатывайте. Появится время для изучения реакта - успеете подучить.
Ответ написан
Комментировать
@kahi4
Как бы коллекция – простой объект и обрабатывай их стандартными средствами.


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

2. Как говорили выше, webpack. Во вторую версию завезли LazyliLoader, так что там даже делать ничего не нужно ручками. Ну и вебпак достаточно умен, чтобы поделить оптимальным образом на бандлы. И опять же, если есть желание поделать что-то ручками, не создаст никаких проблем сделать это и с обычным RequireJS (впрочем, настоятельно рекомендую его все таки похоронить как архаизм, использовать es6 modules, чем их собирать -- вопрос десятый)

3. Сейчас под React есть обертки даже над svg, canvas, webGl и даже над three.js. Сложно представить задачу, под которое нет готовых решений, либо которое не пишется за пол часа.

Как человек, имеющий опыт с первым ангуларом, реактом и бекбоном я бы рекомендовал использовать все таки реакт (из этих трех). Бекбон в свое время был прорывом и до сих пор старается выглядеть молодцом, но его время проходит и сейчас он все таки уступает в скорости разработки и удобства реакту (с флюксом, редуксом или моб-иксом). Конечно, реакт не панацея, но так получилось, что я аж три раза участвовал в переводе проекта с бекбона на реакт и каждый раз это того стоило и все были только счастливы, хотя первое время и побаивались и говорили, что бекбон все таки проверен временем, а реакт -- так, для хипстеров, программирующих с смузи в старбаксе.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
kuzvac
@kuzvac
Посмотрите ещё на https://ru.vuejs.org/ и https://vuex.vuejs.org/ru/ они чем-то схожи с многими упомянутыми технологиями (vue.js взял лучшее из них) и сделали эдакий "правильный react" :)
Ответ написан
@ZoomLS
В 2017 году имеет смысл использовать React+Redux, либо Vue.js. Ну уж точно не Backbone, ибо он уже давно не на коне. В любом случае, выбор за вами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы