Я ищу способ запроса продуктов в каталоге, используя фильтры по свойствам, которые были назначены продукту на основе категории, к которой принадлежит продукт. Таким образом, у меня есть следующие вовлеченные лица:
Продукты
-Я бы
-CategoryId
Категории
[Id, Name, UrlName]
Свойства
[Id, CategoryId, Name, UrlName]
PropertyValues
[Id, PropertyId, Text, UrlText]
ProductPropertyValues
[ProductId, PropertyValueId]
Когда я добавляю товар в каталог, будет добавлено несколько значений ProductPropertyValues в зависимости от категории, и я хотел бы иметь возможность фильтровать все товары из категории, выбирая значения для одного или нескольких свойств. Бизнес-логика, а также индексы и ограничения SQL гарантируют, что все UrlNames и тексты являются уникальными для свойств и категорий значений.
Решением будет приложение, основанное на коде MVC3 EF, и маршрутизация настраивается следующим образом:
/products/{categoryUrlName}/{*filters}
Часть маршрутизации фильтра имеет переменную длину, поэтому можно применять несколько фильтров. Каждый фильтр содержит UrlName свойства и UrlText значения, разделенные подчеркиванием.
URL-адрес может выглядеть следующим образом / products / sites / framework_mvc3 / language_csharp
Я соберу все фильтры, которые буду хранить в списке, прочитав URL. Теперь пришло время на самом деле получить продукты, основанные на нескольких свойствах, и я пытался найти правильную стратегию.
Может быть, есть другой способ реализации фильтров. Все крупные интернет-магазины используют фильтры, зависящие от категории, и я все еще ищу лучший способ реализовать постоянную часть для этого типа функциональности. Предлагаемые решения приводят к «или» результирующему набору, если выбрано несколько фильтров. Я могу себе представить, что добавление свойства text в таблицу product, в которой все значения свойств хранятся в виде объединенной строки, также может работать. Я понятия не имею, во что это обойдется с точки зрения производительности. При аренде не будет сложного соединения, а свойства и их значения будут в любом случае получены в виде текста.
Может быть, механизм фильтрации можно сделать хорошо на стороне клиента.