Самое главное: проверьте ваши данные только один раз Если пользователь может получить доступ только к внешним функциям (вызывать их public ), проверьте входные данные на общедоступном уровне и предположите, что параметры верны на внутреннем ( private ) уровне. Поскольку пользователь не может напрямую вызывать слой private , нет вероятности попадания в него неверных данных. Вы можете на всякий случай добавить утверждения в слой private .
Эмпирическое правило: убедитесь, что всегда есть только одно место, где проверка выполняется для каждого пути. Это не смущает будущих читателей вашего кода. Они могут с уверенностью предположить, где параметры уже проверены и когда они должны проверять их. В противном случае это приведет к защитному программированию и множеству шаблонов (влияние нескольких проверок на производительность, вероятно, наименее важно). Более того, проверка одного и того же ввода дважды и более не добавляет дополнительной безопасности.
Важно пересечь границы и определить контракты - какие методы позволяют какой тип ввода. Я даже видел соглашение об именах, такое как суффикс orNull
и префикс try
для имен параметров / методов соответственно.
Если вы предпочитаете проверку на самом низком уровне ( частный - там, где данные фактически используются), это нормально. Но вы можете получить много дубликатов, поскольку одно и то же значение из слоя public распределяется по нескольким функциям в private area.