Постоянные спецификации - PullRequest
1 голос
/ 08 марта 2011

Я создаю систему, в которой пользователь может подписываться на товары и периодически получать уведомления о новых товарах. Пользователи должны определять, какие элементы они хотят, фильтруя определенные свойства.

Я использую шаблон спецификации для фильтрации элементов. Я думаю, что пользователи должны определять свои собственные спецификации в веб-интерфейсе.

Фильтрация просто:

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. Может быть, я усложняю вещи.

...