Шаблоны/практики инкапсуляции предикатов
-
13-09-2019 - |
Вопрос
Я предполагаю, что большинству из нас в какой-то момент придется столкнуться с этим, поэтому я решил задать вопрос.
Если у вас в BLL много коллекций и вы обнаруживаете, что снова и снова пишете одни и те же старые встроенные (анонимные) предикаты, то здесь явно есть смысл для инкапсуляции, но как лучше всего этого добиться?
Проект, над которым я сейчас работаю, использует старый подход статического класса «ответить всем» (например, класс User и статический класс UserPredicates), но это кажется несколько неуклюжим и немного отговоркой.
В основном я работаю на C#, поэтому было бы очень полезно придерживаться этого контекста, но я думаю, что это достаточно общий вопрос, чтобы можно было услышать о других языках.
Также я ожидаю, что с появлением LINQ и Lambdas будет разница в том, как этого можно достичь, поэтому мне было бы интересно услышать, как это можно сделать как в стилях .Net2.0, так и в стилях 3.0/3.5.
Заранее спасибо.
Решение
Шаблон спецификации возможно, стоит проверить.
При некотором полиморфизме и использовании дженериков это должно работать.
Другие советы
По сути, предикат — это просто реализация шаблона проектирования спецификации.Вы можете прочитать о шаблоне спецификации в Доменно-ориентированный дизайн.