@lihtenshtein

Какие данные нужно проверять в методах?

Коллеги, всем привет.

Программирую давно. Разбираю Kohana и Laravel по косточкам. Хорошо ориентируюсь в движках, но до сих пор не могу сформулировать для себя некие постулаты, скажем так, относительно того, каким данным я могу доверять при создании методов в классах, каким нет, что я должен проверять, что нет.

К примеру. В Кохане есть файл настроек для БД. Файл возвращает массив (ключ => значение) в котором среди прочего указывается собственно имя БД. Предполагается, что программист впишет в этот член строку с названием БД. Но! К примеру, мы вписываем туда массив. Ну вот так, массив и все.

Запускаем скриптик, и когда дело доходит до запросов к БД становится ясно, что в настройках содержится не корректное значение, но проявляется глубоко в движке, непосредственно когда выполняется функция mysql_select_db(). Т.е. разработчик Коханы взял файл настроек, разбил его по составляющим и погнал дальше, не проверив какие значения содержатся в массиве. И когда дело дошло до команды выбора БД наш PHP выбросил ошибку.

Хорошо, если пример такой. А ведь бывают всякие хитрые случаи. Не проверишь сейчас что-то, это может вылезти дальше где-то каким-то боком, как-то не очевидно.

Да, я могу проверять сегодня все и вся, но в том же Ларавел проверок очень мало. Если я буду писать классы с тотальной проверкой, они будут похожи на белых ворон среди классов других программистов, которые не озаботились проверкой, но зато имеют чистый код.

Коллеги, какая у вас стратегия в этом плане?
  • Вопрос задан
  • 2454 просмотра
Пригласить эксперта
Ответы на вопрос 2
jakulov
@jakulov
Мой принцип – такие вещи должны проверяться функциональными тестами приложения, т.е. это же не входые данные приложения, зачем городить на них проверки. А подобные ошибки программистов должны всплывать именно на этапе автоматического тестирования программы.
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
возможно в будущем будет введен тайп-хинтинг для скаляров.

Есть отдельный компонент Symfony/config, который отвечает за валидацию настроек. То есть каждый компонент описывает все варианты настроек которые он хочет получить, какой формат данных допустим, значения по умолчанию и т.д. Валидацией же всего этого и сборкой занимается отдельный компонент. Возможно по этой причине так мало проверок в коде Laravel, ибо все эти проверки были сделаны на более ранних этапах.

По сути в фреймворках использующих Dependency Injection подход с отдельным компонентом для валидации параметров будет самым удобным. Вся логика по проверке и весь бойлерплейт код уходят, а код самого компонента остается чистым. Таким образом необходимость проверять входные данные остается только для публичных методов, и то в некоторых случаях этим можно пренебречь.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы