Ну, прошло некоторое время, так как этот вопрос был опубликован, но я хотел бы дать другую точку зрения по этой теме.
Используя конкретный пример, который вы отправили, IMHO вы должны выполнить проверку, но по-другому.
Ключ к проверке валидации лежит в самом вопросе. Подумайте об этом: вы имеете дело с именами, а не с строками. Строка - это имя, когда оно не равно нулю. Мы также можем думать о дополнительных характеристиках, которые делают строку именем: не может быть пустым и содержать пробелы.
Предположим, вам нужно добавить эти правила проверки: если вы придерживаетесь своего подхода, вы в конце концов загромождите своего сеттера, как сказал @SingleShot.
Кроме того, что бы вы сделали, если более одного объекта домена имеет setName setter? Даже если вы используете классы-помощники как @dave, код все равно будет дублироваться: вызывает экземпляры помощника.
Теперь подумайте: что, если все аргументы, которые вы могли бы получить в методе setName, были действительны? Разумеется, проверка не требуется. Я могу показаться слишком оптимистичным, но это можно сделать.
Помните, что вы имеете дело с именами, так почему бы не моделировать концепцию имени? Вот ваниль, фиктивная реализация показать идею:
public class Name
public static Name From(String value) {
if (string.IsNullOrEmpty(value)) throw new ...
if (value.contains(' ')) throw new ...
return new Name(value);
}
private Name(string value) {
this.value = value;
}
// other Name stuff goes here...
}
Поскольку проверка происходит в момент создания, вы можете получить только действительные случаи Имени. Невозможно создать экземпляр Name из строки «invalid». Не только централизованно проверен код проверки, но и исключения выбрасываются в контексте, который имеет для них значение (создание экземпляра имени).
Вы можете ознакомиться с замечательными принципами дизайна в «Принципах дизайна позади Патагонии» Эрнана Уилкинсона (пример с примера взято из него). Обязательно проверьте ESUG 2010 Video и presentation slides
Наконец-то, я думаю, вы можете найти статью "Fail Fast" Джима Шора.
Похоже, что ваш персонаж QA не получает страховку от единицы тестирования для этих ветвей проверки. Вы должны сказать им, чтобы они перестали быть ленивыми, и также покрывайте их в тестах, как и должно быть. –
Единичное тестирование? Мы не нуждаемся ни в одном модульном тестировании ... (я знаю, я знаю, но я не могу все изменить ...) –