Я создаю систему, в которой пользователь может подписываться на товары и периодически получать уведомления о новых товарах. Пользователи должны определять, какие элементы они хотят, фильтруя определенные свойства.
Я использую шаблон спецификации для фильтрации элементов. Я думаю, что пользователи должны определять свои собственные спецификации в веб-интерфейсе.
Фильтрация просто:
ItemService
{
public IEnumerable<Item> GetMatching(IEnumerable<Item> items, IItemSpecification spec)
{
return items.Where(spec.IsMatch);
}
}
IItemSpecification
{
IsMatch(Item item);
}
Вопрос в том, каков наилучший способ сохранить для каждого пользователя различные спецификации? У меня нет никаких требований относительно того, как я сохраняю это. Реляционная база данных, базы данных документов, XML, все, что работает.
Я могу думать о:
Написать внешний DSL (и сохранить его в простом столбце в rdb)
Сохранение строки (в rdb) для каждого свойства в спецификации, которая указывает, что фильтровать, и модификаторы (равно, больше, чем). Это приведет к довольно большому количеству строк.
Создать новую таблицу для каждой спецификации (не знаю, реалистично ли это)
Кажется, что опция DSL - самое чистое решение (мне нужно только написать DSLSpecification
, который принимает dsl и передает его в мой Itemservice.
Может быть, я усложняю вещи.