Я реализую шаблон спецификации. NotSpecification кажется простым на первый:хороший способ реализовать NotSpecification: isSpecialCaseOf?
NotSpecification.IsSpecialCaseOf(otherSpecification)
return !this.specification.isSpecialCaseOf(otherSpecification)
Но это не работает для всех Технические характеристики:
Not(LesserThan(4)).IsSpecialCaseOf(Equals(5))
Это должно возвращать ложь вместо истины. До сих пор я считаю, что единственный способ выполнить isSpecialCaseOf NotSpecification - реализовать оставшуюся частьUnsatisfiedBy (частичное подчинение в документе по шаблону спецификации). Но, возможно, мне не хватает чего-то более простого или логичного понимания, которое делает это ненужным.
Вопрос: Есть ли другой способ реализации этого, не используя остаток? Неудовлетворительно?
Что должно делать «IsSpecialCaseOf()»? –
@gabriel: isSpecialCaseOf по существу определяет, является ли спецификация более ограничительной, чем другая (чем больше 5, более ограничительная, чем более 2). «Спецификация B является частным случаем Спецификации A тогда и только тогда, когда для любого возможного объекта-кандидата X, где A удовлетворяет X, B всегда будет удовлетворять также X». – koen