Перейти к основному содержимому

Сравнение Object Bricks и Classification Store

Pimcore предоставляет множество возможностей для моделирования структурированных данных (= Pimcore Data Objects).

Большинство из них интуитивно понятны, но некоторые часто вызывают вопросы: когда их лучше использовать и в чем именно разница.

Основными кандидатами для такого сравнения являются Object Bricks (Объектные кирпичики) и Classification Store (Хранилище классификаций).

Основная цель

У Object Bricks и Classification Store общая цель, которую проще всего объяснить на примере:

В магазине представлены товары разных категорий (например, обувь, палатки, фонарики и т.д.). У всех этих товаров есть общие атрибуты (название, фото, описание, артикул, цвет), которые задаются в определении общего класса продукта.

Однако существуют атрибуты, специфичные для каждой категории: у обуви это тип подошвы, у палаток — материал пола, у фонариков — мощность светового потока. Все эти поля можно было бы добавить в общий класс продукта, но тогда структура класса станет слишком огромной и запутанной, что плохо для поддержки. В таких случаях для категорийных атрибутов лучше использовать Object Bricks или Classification Store.

В целом оба типа данных делают жесткое определение класса расширяемым на уровне конкретного объекта. Это применимо не только к товарам, но и к любым другим данным. Атрибуты обоих типов можно отображать, фильтровать и редактировать в табличном представлении (Grid View).

Технические различия в реализации

ПараметрObject BricksClassification 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)

К сожалению, универсального правила не существует. Выбор зависит от множества факторов: иногда лучше одно, иногда другое, а иногда — их комбинация. Решение должен принимать разработчик, исходя из конкретных задач проекта.


Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.