Я ищу надежную архитектуру, которая решит следующую проблему:
Как пользователь, я хочу динамически фильтровать некоторую базу данных людей, динамически добавляя критерии.Я также хочу иметь возможность пакетного обновления только выбранных полей в базе данных на основе результатов фильтра.
Справедливо следующее:
- У меня есть трехуровневое решение (GUI, бизнес-уровень, уровень доступа к данным).
- Предположим, у меня есть
Repository<Person>
, Person
- модель домена. - Хранилищеподдерживает linq и может дать мне:
IQueryable<T> GetAll()
У меня есть несколько идей:
- Я думаю об использовании API динамического выражения, которыйрасширяет функциональность LINQ, так что я могу динамически добавлять критерии поиска.
- Я смотрел на NHibernate QueryBuilder, и это может быть чем-то, заимствовать идеи.
Теории решений:
Итак, в любом случае я думаю о графическом интерфейсе, который просит DomainModel описать себя (какие свойства существуют, какие операторы разрешены и какие допустимые типы значений). Таким образом, я мог бы сделать некоторые каскадные выпадающие списки длясвойства и разрешенные операторы.Я подумываю описать свойства либо с помощью метода в модели, например: DescribeMyself();
, а затем объединить это с украшением свойств с помощью атрибутов.
Вопросы:
Итаккак насчет описания свойств для модели, как бы вы это сделали?Например, свойство: string Name
должно быть доступно для поиска либо с оператором Equals
, либо с оператором Like.
А как насчет перечислений?Представь себе MyGenderEnum Gender
.При выполнении фильтра Equals мне нужно описать, что он должен соответствовать любому значению в данном Enum.
Что-то, о чем подумать!