Мне просто интересно, есть ли рекомендуемая стратегия для работы с null
кандидатами в шаблоне спецификации. На мой взгляд, есть две возможные стратегии:
- Бросить исключение, если кандидат
null
.
- Возвращает
false
для случаев, когда null
не является допустимым значением кандидата.
Примеры написаны на Kotlin, но это может легко применяться и к C # и Java.
Пример - сгенерировать исключение
class RangeSpecification<T : Comparable<T>>(
private val min: T,
private val max: T
) : Specification<T?>() {
override fun isSatisfiedBy(candidate: T?): Boolean {
checkNotNull(candidate)
// ^ Throws IllegalStateException("Required value was null.")
return candidate in min..max
}
}
Пример - Возврат false
class RangeSpecification<T : Comparable<T>>(
private val min: T,
private val max: T
) : Specification<T?>() {
override fun isSatisfiedBy(candidate: T?): Boolean {
return candidate != null && candidate in min..max
}
}
Я не уверен, что это квалифицируется как самоуверенный вопрос (и извинения, если это так), но мне просто интересно, какой подход более подходит в соответствии с шаблоном спецификации?
Ссылки