Не даёт покоя вот такой вопрос.
Все существующие CMS/CMF реализуют архитектуру универсальной БД, когда все данные (ресурсы/страницы) хранятся в одной таблице, а их индивидуальные характеристики — в другой таблице. С одной стороны, это позволяет реализовать более простую логику обработки этих данных и предоставляет возможность управлять этими данными в админке.
Но главная проблема универсальной БД — это чрезвычайная сложность запросов с участием индивидуальных характеристик сущностей. Для выборки с участием TV-полей приходится каждую TV подключать через отдельный join. А для фильтрации запроса по множественным TV приходится использовать LIKE (сплошной прогон по всем строкам => очень медленное выполнение).
Для обхода этих проблем можно использовать 3 манёвра:
1. Для реализации быстрой выборки TV-полей — хранить все TV в дополнительном поле таблицы ресурсов (после выборки — «распаковывать» их)
2. Для реализации быстрой фильтрации по TV — дублировать некоторые TV в таблицу ресурсов (и создать для них индексы)
3. Для быстрой фильтрации по множественным TV (с идентификаторами связанных ресурсов) использовать 3-ю таблицу для связей ресурсов друг с другом
Но эти обходные манёвры усложняют логику и являются лишь частным решением проблем.
Вопросы:
1. В компонентах, которые вы разрабатываете, — новые сущности реализованы в виде ресурсов (для каждого — свой class) или на базе собственных таблиц?
2. Если все сущности предметной области проекта реализовывать на собственных таблицах, то в этом случае какие преимущества остаются у modx перед классическими фреймворками? Ведь и там, и там придётся самостоятельно реализовывать функционал админки для работы с этими сущностями + строить ORM-модель для этих сущностей. Более того, для таких таблиц не получится задействовать стандартные механизмы modx (friendly url, плагины, права на TV, поиск в админке и пр.). И вообще, не получится отображать эти страницы, т.к. ядро modx рендерит только ресурсы. Т.е. если все сущности реализовать на собственных таблицах, нужен ли будет modx вообще?