Я изучаю личный проект Grails и хочу собрать модель домена для представления каталога продуктов. Я действительно не могу решить, как лучше это сделать. У меня будет несколько разных категорий продуктов, хотя у многих категорий будет только базовый набор свойств, общих для всех категорий (например, название продукта, описание продукта, цена и т. Д.). Однако некоторые продукты будут иметь дополнительные свойства, специфичные для их категории.
Я изучил технику модели значений атрибутов сущности (EAV), которая обеспечивает очень расширяемое решение. И я рассмотрел способ использования явной модели наследования ОО, где у меня есть подклассы базового класса Product для представления любого продукта, который имеет дополнительные свойства.
Очевидно, что второй подход менее расширяемый - для добавления новой категории продукта потребуется новый объект и, вероятно, пользовательский вид / редактор для внешнего интерфейса. Тем не менее, как разработчик, я думаю, что модель программирования значительно понятнее и гораздо более логична для кодирования.
Подход EAV позволит обеспечить динамическую расширяемость, но приведет к более загадочной модели программирования и приведет к снижению производительности в БД (объединение сложных таблиц). Представления / редакторы на внешнем интерфейсе могут генерироваться динамически, чтобы включать любое количество настраиваемых атрибутов для категории продукта - хотя я уверен, что возникнут ситуации, когда такое динамическое создание будет недостаточным с точки зрения удобства использования.
Когда я рассматриваю фреймворк, такой как Grails, кажется, имеет смысл пойти по пути создания явной модели наследования. Я не уверен, что фреймворк, такой как Grails, будет так хорошо подходить к подходу EAV - многие преимущества Grails будут потеряны в сложности. Однако я не уверен, что этот подход будет масштабироваться практически по мере увеличения количества категорий продуктов.
Мне было бы действительно интересно услышать об опыте других в этом виде моделирования!