Что такое паттерн Specification?

Ответ

Инкапсулирует бизнес-правило в объект с методом isSatisfiedBy(candidate). Спецификации можно комбинировать (and, or, not).

interface Specification { public function isSatisfiedBy($candidate): bool; }
class ActiveUserSpec implements Specification {
    public function isSatisfiedBy($user): bool { return $user->isActive(); }
}
$spec = new ActiveUserSpec()->and(new PremiumSpec());

Удобно для фильтрации репозиториев, валидации доменных правил, переиспользуемых условий.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.