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, вы всегда можете обратиться к нам.