Представьте, что у вас есть приложение, которое является своего рода интерфейсом для всей вашей бизнес-логики. В этом интерфейсе есть много DLL, от которых это зависит, и методы в этих DLL могут многократно вызывать друг друга при однократном выполнении данного метода в интерфейсе. Если пользователи вашего приложения не имеют прямого доступа к этим DLL, вам...
1) Риск (малая) производительность попадает и проверяет параметры в каждом из этих методов, даже если вы можете закончить проверку тех же параметров примерно 5 раз; или
2) Опасьте непредвиденное поведение и предположите, что, когда вы проверяете входные параметры, все другие возможные параметры, переданные и из вашего внутреннего кода, являются допустимыми (например, ни пустым, ни пустым)?
Изменить:. Чтобы привести пример, предположим, что у вас есть Regex RegexA
и метод
internal bool Matches(string expression)
{
return RegexA.IsMatch(expression);
}
IsMatch
выдаст исключение из нулевого параметра, но не в пустую строку. Если вы заранее знаете, что пустая строка никогда не будет соответствовать этому регулярному выражению, вы должны использовать if (String.IsNullOrEmpty(expression))
раньше, даже зная, что он может быть проверен на недействительность внутри метода структуры IsMatch
? В этом случае вы явно повторяете проверку, но лучше ли повторять это или рисковать?