Я занимаюсь исследованиями и разработками, и поэтому изучаю шаблоны проектирования. Недавно я читал образец спецификации и был упомянут в этой замечательной статье .
Я был заинтригован простотой и чистотой кода, но я начал проводить некоторые сравнения с реализацией того же самого чистота с использованием других методов.
Рассмотрим следующий интерфейсный контракт для сервисного уровня:
public interface IFooDataService
{
ICollection GetFoosBySpecification(Specification specification);
ICollection GetFooByPredicate(Func predicate);
ICollection GetFooBySearchArgs(FooSearchArgs searchArgs);
}
Итак, некоторые начальные точки: заставляет код говорить по-английски
Мои мысли о методах расширения (трубы и фильтры):
Что ты думаешь? У кого-нибудь из вас были проблемы с любым из вышеперечисленных методов? Любые рекомендации?
О том, чтобы начать новый проект, так что эти типы соображений имеют решающее значение.
Спасибо за помощь.
РЕДАКТИРОВАТЬ для разъяснения по шаблону спецификации
Здесь то же самое использование шаблона спецификации.
Specification someSpec; // Specification is an abstract class, implementing ISpecification members (And, Or, Not, IsSatisfiedBy).
someSpec = new AllFoosMustHaveABarSpecification(); // Simple class which inherits from Specification class, overriding abstract method "IsSatisfiedBy" - which provides the actual business logic.
ICollection foos = fooDataService.GetFoosBySpecification(someSpec);
Из моего небольшого опыта:
Ну, сначала я бы написал метод Predicate, даже если он используется только как частная деталь реализации для двух других:
private ICollection<Foo> GetFoosBySpecification(Specification<Foo> spec)
{
return GetFooByPredicate(f => spec.IsSatisfiedBy(f));
}
Функция аргумента поиска будет аналогичной однострочной .
Кроме того, я действительно ничего не могу сказать абстрактно. Мне нужно больше узнать о структуре данных, чтобы выбрать лучший способ их поиска.