Pimcore предлагает множество возможностей для моделирования структурированных данных (= Pimcore Data Objects).
Большинство из них интуитивно понятны, в то время как другие часто вызывают вопросы о том, когда их использование наиболее оправдано и в чем именно разница между отдельными вариантами.
К таким вариантам выбора относятся Object Bricks и Classification Store.
Основная цель Object Bricks и Classification Store.
Object Bricks и Classification Store преследуют общую цель, которую лучше всего объяснить на примере:
Магазин предлагает товары множества различных категорий (например, обувь, палатки, фонарики и т.д.). Все эти товары имеют некоторые атрибуты, которые одинаковы для всех категорий (например, название, фото, описательный текст, артикул, цвет и т.д.). Эти атрибуты создаются в общей структуре класса продукта. Однако есть также атрибуты, которые различаются для каждой категории (у обуви есть профиль подошвы, у палаток — материал пола, а у фонариков — интенсивность света). Все эти атрибуты, конечно, можно было бы также добавить в общую структуру класса продукта. Но это приведет к очень большой и запутанной структуре класса (что, конечно, не очень хорошо). Лучше использовать Object Bricks или Classification Store для этих категорийно-специфичных атрибутов.
В общем смысле, оба типа данных делают жесткую структуру класса объектов расширяемой на уровне объекта. Конечно, это применимо не только к данным о продуктах, но также может быть полезно и для других данных. Атрибуты обоих типов данных могут отображаться, фильтроваться и редактироваться в табличном представлении объектов.
Object Bricks | Classification Store | |
Возможности дизайна в редакторе объектов | Варианты компоновки, предоставляемые ExtJS и Pimcore (панели, вкладки, регионы, блоки полей, текстовые описания и т.д.).![]() |
Атрибуты расположены в областях с ограниченными возможностями влияния на их расположение.![]() |
Доступные типы данных | Почти все типы данных Pimcore, за исключением структурированных типов данных, таких как Field Collections, Classification Store, Object Bricks | Только очень ограниченные простые типы данных, такие как текстовые поля, числа, даты, выпадающие списки и множественные выборы (например, отсутствуют связи). |
Хранение данных | Стандартная схема Pimcore в отдельных таблицах базы данных с одним столбцом для каждого атрибута. | Схема Entity Attribute Value (EAV), то есть в очень длинной таблице базы данных с одной строкой для каждого атрибута (это влияет на скорость загрузки и фильтрации). |
Доступ к данным через API | Довольно просто через геттеры и сеттеры, как это принято в объектах Pimcore. | Немного сложнее, через общие вызовы геттеров/сеттеров. |
Фильтрация в списках объектов | С использованием JOIN напрямую в запросе Object-Listing. | Возможна только через пользовательские подзапросы и довольно трудоемка. |
Когда что использовать — чек-лист
Основное правило может быть таким:
- Если у вас есть управляемое количество категорий с определенными атрибутами, лучше использовать Object Bricks.
- Если категорий будет много (более 30) и у них много атрибутов, то лучше использовать Classification Store.
Однако (к сожалению) нет универсального правила, которое всегда работает. Все зависит от множества факторов: иногда лучше один вариант, иногда другой, а иногда — комбинация обоих. Поэтому решение должен принимать разработчик (в координации с более опытными коллегами, знающими нюансы Pimcore).
А если у вас есть вопросы по Pimcore, вы всегда можете обратиться к нам.