Сравнение Object Bricks и Classification Store
Pimcore предоставляет множество возможностей для моделирования структурированных данных (= Pimcore Data Objects).
Большинство из них интуитивно понятны, но некоторые часто вызывают вопросы: когда их лучше использовать и в чем именно разница.
Основными кандидатами для такого сравнения являются Object Bricks (Объектные кирпичики) и Classification Store (Хранилище классификаций).
Основная цель
У Object Bricks и Classification Store общая цель, которую проще всего объяснить на примере:
В магазине представлены товары разных категорий (например, обувь, палатки, фонарики и т.д.). У всех этих товаров есть общие атрибуты (название, фото, описание, артикул, цвет), которые задаются в определении общего класса продукта.
Однако существуют атрибуты, специфичные для каждой категории: у обуви это тип подошвы, у палаток — материал пола, у фонариков — мощность светового потока. Все эти поля можно было бы добавить в общий класс продукта, но тогда структура класса станет слишком огромной и запутанной, что плохо для поддержки. В таких случаях для категорийных атрибутов лучше использовать Object Bricks или Classification Store.
В целом оба типа данных делают жесткое определение класса расширяемым на уровне конкретного объекта. Это применимо не только к товарам, но и к любым другим данным. Атрибуты обоих типов можно отображать, фильтровать и редактировать в табличном представлении (Grid View).
Технические различия в реализации
| Параметр | Object Bricks | Classification Store |
|---|---|---|
| Визуальное оформление в редакторе | Все возможности макетов ExtJS и Pimcore (панели, вкладки, области, группы полей, текстовые описания и т.д.). | Все атрибуты располагаются друг под другом в областях (regions), возможностей влияния на интерфейс мало. |
| Доступные типы данных | Почти все типы данных Pimcore, кроме структурированных типов (Field Collections, Classification Store, другие Object Bricks). | Ограниченный набор простых типов: текст, числа, даты, выпадающие списки (select/multiselect). Связи (relations) не поддерживаются. |
| Хранение данных | Стандартная схема Pimcore в собственных таблицах БД (одна колонка на каждый атрибут). | Схема EAV (Entity-Attribute-Value): одна большая таблица, где каждый атрибут — это отдельная строка. |
| Доступ к данным через API | Просто через геттеры и сеттеры, как в обычных объектах. Подробнее см. здесь | Сложнее, через генерические вызовы геттеров/сеттеров - см. здесь |
| Фильтрация в списках | С помощью прямых JOIN-запросов в Object Listing, см. здесь | Только через кастомные подзапросы (subqueries), что довольно трудоемко. |
Что выбрать: контрольный список и «золотое правило»
Основное правило
- Если у вас небольшое количество категорий со специфическими атрибутами — используйте Object Bricks.
- Если категорий очень много (более 30) с большим количеством атрибутов — используйте Classification Store.
Дополнительные вопросы для принятия решения
- ужны ли связи (relations) в атрибутах? На данный момент это работает только с объектными кирпичами (Object Bricks)
- Нужно ли создавать атрибуты автоматически (например, через импорт из другой системы)? Это проще реализовать с хранилищем классификации (Classification Store)
К сожалению, универсального правила не существует. Выбор зависит от множества факторов: иногда лучше одно, иногда другое, а иногда — их комбинация. Решение должен принимать разработчик, исходя из конкретных задач проекта.
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.