Всем привет!
Сегодняшний топик наверняка будет интересен тем, что пробует себя в javascript. Сегодня я довольно просто и на примерах покажу из чего состоит сайт MODX-Клуба, какие технологии применяются, как проблемы решаются и что нас ожидает в ближайшем будущем.
Если вы следили за изменениями в последние месяца три, то наверняка обратили внимание, что обновления на сайте появляются как бы внезапно. Что называется "никогда такого не было и вот опять". В ноябре сайт мигрирует на связку MODX+JS, а через 4 дня сайт уже полностью на JS, и в тот же день еще обновления прилетают. Дальше больше: вводится управление проектами, серия мелких и крупных багфиксов, а потом еще и блокчейн. И все это за довольно короткий срок в 3 месяца. И знаете что еще интересно? Это не внедрение готовых технологий. @prisma-cms разрабатывается в процессе, после чего новый функционал добавляется на сайт Клуба. Плюс к этому у меня есть еще и параллельные задачи. Когда же я все это успеваю делать? А здесь секрет простой: просто работайте по 30 часов в сутки :))) Шучу :) Чаще чем через день не надо так)) А если серьезно, то я бы сказал так: перед этим было почти два года исследований всевозможных новейших технологий из мира JS и на выходе получилась весьма мощная модульная система, которая и позволяем на ее основе выполнять такие большие объемы работы и не закопаться. К слову, если вы не читали мою заметку Разработка на javascript или как я до этого докатился, советую. Там дополнительно развернут мой взгляд на мир JS.
Так в чем же суть модульности этой @prisma-cms? Смотрите, в большинстве случаев, когда вы разрабатываете сайт или какой-то веб-сервис, если это у вас комплексная программерская работа, то в большинстве случаев у вас основная работа делится на две больших задачи:
1. Разработка бэкэнда (проектирование базы данных, написание запросов к БД и прочей необходимой логики). Это суть обеспечение механизма управления информацией (ведь документы, заказы, пользователи и т.п. - это же информация).
2. Разработка фронтэнда (то есть конечная шаблонизация, оформление и т.п.). Это суть отображения информации (то есть фильтрация, вывод и в довесок какие-нибудь пользовательские функции типа оформления заказа).
Сейчас еще принято выделять миддл (middle), то есть что-то среднее, связующее между этими двумя областями (как правило в виде API, микросервисов и т.п.), но мы все же больше сейчас сосредоточимся на первых двух областях.
Так вот, @prisma-cms - это набор двух типов модулей. Одни рассчитаны больше для бэкэнда, а другие для фронтэнда. "Больше" - потому что здесь грани особо нет, и там и там используется JS, но все-таки предназначение модулей разное, так что я их выделяю в два отдельных класса.
prisma-modules
Те, что работают на сервере, у меня исторически называется модулями. У каждого модуля по-хорошему должен быть свой фронт-брат, но это не обязательно. Например, @prisma-cms/upload-module добавляет схему для загрузки и хранения файлов. По сути он создает только одну сущность File, которую видно в схеме сайта. То есть если мы задеплоим только этот модуль, в базе данных у нас будет только одна основная таблица - File (_RelayId не в счет - это техническая таблица). Сейчас такой бэкэнд в состоянии только принимать на загрузку файлы и даже не проверять на пользователей и не указывать владельца файла, потому что сущности User просто нет сейчас. Тем не менее, если поставить и запустить фронтовый модуль @prisma-cms/uploader, то получится через него загружать файлы, с этим он справится. Правда, хоть у нас в нем и есть форма авторизации, мы не сможем ни зарегистрироваться, ни авторизоваться все по той же причине - сущности User нет сейчас. Но если мы установим модуль @prisma-cms/user-module, то база у нас значительно расширится и таблиц у нас прибавится. Вот теперь мы можем и авторизоваться и даже аватарку загрузить. А если я подключу еще и @prisma-cms/cooperation-module, то схема вообще дикая получается, и в базе данных уже 46 таблиц. Тут вам уже и команды, проекты, таймеры, услуги и т.п. И ведь это еще не предел, есть и другие модули.
Прелесть здесь в том, что этим модули вполне так суммируются. То есть если взять несколько отдельных модулей, собрать их в кучу в разной последовательности в большинстве случаев даст одинаковый суммарный результат в виде готовой базы данных и API для работы с ней. И устанавливается это все на самом деле порой в считанные минуты.
prisma-components
По началу во фронтовых компонентах действительно использовался суффикс component, но довольно быстро я от него избавился в целях "а зачем оно нужно? ведь и так понятно". Хотя заготовка для компонентов по прежнему называется component-boilerplate.
Компоненты, как я и говорил, отвечают за отображение. При чем эти компоненты на вход могут получать гораздо более богатое API, чем то, на которое они рассчитаны. К примеру, на вход упомянутому @prisma-cms/component-boilerplate можно скормить все API с сайта MODX-Клуба (вот здесь я писал как это делается) и он даже будет позволять авторизоваться и вывести список пользователей. Но в нем нет интерфейсов для отображения списка чатов, сообщений, топиков, комментариев и т.п. И хотя, сами понимаете, с оформлением не все так просто, как с простым обновлением базы данных, здесь тоже не все так безнадежно, и здесь тоже есть некоторые полезные компоненты. К примеру, если взять @prisma-cms/cooperation и скормить ему все то же самое API Клуба, то хоть местами и не в том виде, но все же мы увидим знакомые сущности типа списка проектов или списка таймеров, а диаграма Ганта вообще практически как есть на сайте Клуба размещена.
Вот так вот по кусочкам и собираются конечные проекты. В последующих статьях более подробно расскажу на примере сайта Клуба как это все собирается в кучу. Напомню, что сайт Клуба тоже лежит в открытом доступе. Скоро здесь вообще очень интересный функционал появится, но тсс, это секрет...