Мы не являемся судьями кодекса святой инквизиции, поэтому мы не обязаны сообщать вам, «нормально ли это просто поставить нулевую проверку».
Конечно, можно написатькак обычный оператор if
, как мы это делали последние 25 лет, точно так же, как можно изобрести многословную структуру, инкапсулирующую проверку null
и вводящую в нее термин «лямбда».Единственный оставшийся вопрос будет, если вы действительно намереваетесь написать if(person != null) { /* do the checks */ }
, другими словами, разрешить null
человеку пройти тест.
В случае, если вы хотите отказатьсяnull
человек (что было бы более разумно), уже есть возможность написать это без явного теста, Objects.requireNonNull
, начиная с Java 7, которая демонстрирует, что вам не нужно «вселучше с лямбдами »для достижения этой цели.Как правило, вы можете написать проверочный код разумно с помощью обычного кода, вопреки примеру статьи, используя простые инструменты, такие как оператор &&
, и вставляя общий код в методы:
public void validate(Person person) {
Objects.requireNonNull(person, "person is null");
checkString(person.getFirstName(), "first name", 2, 12);
checkString(person.getLastName(), "last name", 4, 30);
checkString(person.getEmail(), "email", 3, 50);
if(!person.getEmail().contains("@"))
throw new IllegalArgumentException("invalid email format");
checkBounds(person.getAge(), "age", 0, 110);
}
private void checkString(String nameValue, String nameType, int min, int max) {
Objects.requireNonNull(nameValue, () -> nameType+" is null");
checkBounds(nameValue.length(), nameType, min, max);
}
private void checkBounds(int value, String valueType, int min, int max) {
if(value < min || value > max)
throw new IllegalArgumentException(valueType+" is not within ["+min+" "+max+']');
}
Это так же, как ваш кодбез какой-либо структуры с «лямбда-выражением» в названии, все еще имея читаемый код проверки и позволяющий повторно использовать проверочный код.При этом вместо имени класса LamdaPersonValidator
, которое отражает то, как вы его реализовали, вы должны использовать имена классов, отражающие обязанности класса.Понятно, что валидатор, отвечающий за проверку некоторых свойств объекта, не должен смешиваться с валидатором, проверяющим наличие сущности в базе данных.Последняя сама по себе является совершенно другой темой, и ее также следует задать самому себе.
Приведенный выше код предназначен только для примера того, как добиться того же, что и в исходном коде. никогда не должно появляться в производственном коде в этой форме, поскольку это является демонстрацией широко распространенного анти-паттерна для применения произвольных необоснованных ограничений к свойствам, наиболее вероятно, изобретенных программистом при написании кода.
Почему предполагается, что человек должен иметь имя и фамилию, и почему он предполагает, что имя должно содержать не менее двух и не более двенадцати символов, а фамилиядолжно быть от четырех до тридцати символов?
На самом деле это даже не символы, так как связь между char
единицами и действительными символами не равна 1: 1.
Должно читаться для каждого программиста, думающегоо реализации проверки имен, это Falsehoods Программисты верят в имена (с примерами) .
Аналогично, Список проверенных пожилых людей из Википедии перечисляет сотню людей в возрастевыше 110.
И нет никаких оснований предполагать, что адрес электронной почты не может иметь большечем пятьдесят символов. истинная проверка правильности шаблона электронной почты может оказаться тем, что намеренно опущено ...