Где должна происходить проверка данных?


Я читал противоречивые философии о том, где должна происходить проверка данных, и это еще больше сбивает меня с толку. Некоторые говорят, что это должно быть только в базе данных. Другие говорят, что правила проверки должны быть зеркально отражены в других слоях, таких как bll или ui.

Где должна находиться проверка данных? Следует ли разбивать правила на несколько слоев? Каковы некоторые из фактических лучших практик (в отличие от теории, голова в облаках типа вещей) относительно того, когда и где проверять данные в приложении, работающем поверх базы данных.

2 13

2 ответа:

Мои 2 цента:

Проверка данных должна происходить в двух местах:

  1. Точка, в которой выполняется обработка данных, например проверка входных параметров SQL-запроса.

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

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

Это говорит о том, что есть много неправильных путей, но нет правильного пути. Проверка зависит от архитектуры вашего приложения, характера содержащихся в нем данных и способа их использования.

Это должно быть сделано:

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