Это зависит от того, какую проверку вы будете выполнять и где. Я думаю, что каждый слой приложения можно легко защитить от плохих данных, и его слишком легко сделать, чтобы оно того не стоило.
Рассмотрим многоуровневое приложение и требования / средства проверки каждого уровня. Средний слой, Object, является тем, который, кажется, должен обсуждаться здесь.
База данных
защищает себя от недопустимого состояния с ограничениями столбцов и ссылочной целостностью, что приводит к тому, что код базы данных приложения генерирует исключения
Object
ASP.NET / Windows Forms
защищает состояние формы (не объекта) с помощью подпрограмм валидатора и / или элементов управления без с использованием исключений (winforms не поставляется с валидаторами, но в msdn есть отличная серия, описывающая, как их реализовать )
Допустим, у вас есть таблица со списком гостиничных номеров, и в каждом ряду есть столбец для количества кроватей, называемых «кроватями». Наиболее разумным типом данных для этого столбца является малое целое число без знака *. У вас также есть простой объект ole со свойством Int16 * под названием «Кровати». Проблема в том, что вы можете вставить -4555 в Int16, но когда вы собираетесь сохранить данные в базе данных, вы получите исключение. Что хорошо - моя база данных не должна позволять утверждать, что в гостиничном номере меньше 0 кроватей, потому что в гостиничном номере не может быть меньше, чем 0 кроватей.
* Если ваша база данных может представлять ее, но давайте предположим, что она может
* Я знаю, что вы можете просто использовать ushort в C #, но для целей этого примера давайте предположим, что вы не можете
Существует некоторая путаница относительно того, должны ли объекты представлять вашу бизнес-единицу или они должны представлять состояние вашей формы. Конечно, в ASP.NET и Windows Forms форма отлично способна обрабатывать и проверять свое собственное состояние. Если у вас есть текстовое поле в форме ASP.NET, которое будет использоваться для заполнения того же поля Int16, вы, вероятно, разместили на своей странице элемент управления RangeValidator, который проверяет ввод, прежде чем он будет присвоен вашему объекту. Он не позволяет вам ввести значение меньше нуля и, вероятно, не дает вам ввести значение, превышающее, скажем, 30, что, как мы надеемся, будет достаточным для обслуживания худшего хоста, зараженного блохами, который вы можете себе представить. При обратной передаче вы, вероятно, будете проверять свойство IsValid на странице перед построением вашего объекта, тем самым предотвращая когда-либо представление вашего объекта менее чем в ноль и предотвращая вызов вашего установщика со значением, которое он не должен ' t hold.
Но ваш объект по-прежнему способен представлять менее чем нулевые слои, и опять же, если вы использовали объект в сценарии, не включающем слои, в которые встроена валидация (ваша форма и ваша БД ) тебе не повезло.
Зачем вам вообще быть в этом сценарии? Это должно быть довольно исключительное стечение обстоятельств! Поэтому вашему установщику необходимо выдать исключение при получении неверных данных. Это никогда не должно быть брошено, но это может быть. Вы можете написать форму Windows для управления объектом, чтобы заменить форму ASP.NET, и забыть проверить диапазон перед заполнением объекта. Вы можете использовать объект в запланированной задаче, в которой вообще отсутствует взаимодействие с пользователем, и которая сохраняет другую, но связанную область базы данных, а не таблицу, в которую отображается объект. В последнем сценарии ваш объект может войти в состояние, в котором он недопустим, но вы не будете знать, пока недопустимое значение не повлияет на результаты других операций. Если вы проверяете их и генерируете исключения, то есть.