Добрый день коллеги по цеху. Разрабатываю архитектуру крупного e-commerce проекта. Мне очень нравится декларативный подход БЭМ как идея, методология и подход к проектированию фронтенда со своей системой сборки. Вообще считаю что фронтенд должен быть полностью отделен от бэкенда, роль которого только заниматься доставкой "сырых" данных. А общаться фронт и бэк между собой должны по API. Следовательно получаем следующую архитектуру:
Все запросы через балансер распределяются на фронтенд кластер из nodejs серверов, которые в свою очередь являются неким прокси к кластеру из backend серверов, которые формируют bemjson-дерево из исходных данных в БД и отдает html
Но в реальном мире все немного по-другому. На бекенде будет использоваться готовая e-commerce платформа внутри которой тяжелое java enterprise приложение. Оно уже из коробки имеет свой встроенный шаблонизатор jsp. Его, конечно можно не использовать, но с одной стороны у бизнеса есть четкие сроки запуска проекта, с другой стороны у подрядчика есть опыт классического внедрения этой платформы с использованием шаблонизатора jsp и нет опыта проектов на БЭМ.
Собственно вопросы следующие:
1) Похвалите/раскритикуйте следующий план внедрения: На первом этапе сделать верстку и сборку бандлов по БЭМу и запихнуть все это в шаблонизатор jsp На втором этапе уже разделить полностью фронт и бэк, т.е. перейти на full stack bem
2) Как вы решаете вопросы хранения и обмена пользовательских сессий между фронтом и бэком? Например по адресу mysite.ru/catalog я хочу получить персонализированный список товаров и цен для конкретного авторизованного пользователя. В этом случае нода должна либо хранить сессию пользователя, либо каждый раз опрашивать бэк?
3) Вы делаете несколько репозиториев .git ? Один отдельно для фронта и второй для бекенда? Однако некоторые фичи требуют одновременно изменений фронта и бэка и следовательно должны релизится одновременно. В этом случае удобно все хранить в одном репо.
спасибо, всем b_
Тут не так. backend забирает данные из БД и отдаёт json. А frontend запрашивает нужные ему данные из backend, обрабатывает их (например, с помощью bemtree) и формирует bemjson, который уже простым bemhtml превращается в html.
Вы можете использовать jsp, но не для формирования html, а для генерации json. В этом случае вся система на Java будет вашим backend, а frontend пишется полностью на node.
Зависит от. Фронт на ноде вполне может сам ходить за данными сессии в какой-нибудь memcached, но и оверхед от бекенда, который будет делать запрос и отдавать данные, небольшой, так что можно и через него ходить.
Бекенд предоставляет API, который должен версионироваться на уровне урлов (
https://site.ru/v2/items/
), тогда не будет проблем иметь разный релизный цикл.@vithar @tadatuta спасибо
@vithar а есть где посмотреть как реализовать frontend который будет ходить в backend и выплевывать html ?
Например: https://github.com/bem/sssr (+ статья)