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