Я создаю класс данных для каждого вида данных, которые я использую. Я не использую типы "string" и "int", кроме как внутри этих классов данных. Мои классы данных имеют значимые имена и используются в тех случаях, когда конкретные ограничения класса имеют смысл.
Например, если у вас есть поле «оценка», которое имеет смысл только со значениями от 1 до 100, тогда у вас есть БЕЗ БИЗНЕСА , хранящее его в классе «int», диапазон которого равен -2 147 483 648. до 2 147 483 647. Если вы делаете это, получайте удовольствие, пытаясь проверить его избыточно везде, где вы его проходите, и получайте удовольствие, выясняя, когда и где вам нужно его проверить, и получайте удовольствие, когда вы забываете место и позволяете неверным данным проникать в вашу систему, и забавно пытаться объяснить мне, как ошибка, которая не является ошибкой программиста, возможна в программном обеспечении, написанном для детерминированного цифрового оборудования.
Когда / Где проверить:
Если вы принимаете оценку из текстового поля в пользовательском интерфейсе, выполните предварительную проверку на ней в точке входа, выдавая сообщения об ошибках, соответствующие данному конкретному пользовательскому интерфейсу. Предварительная проверка может быть настолько сложной, насколько вам нужно, чтобы она была , чтобы обеспечить значимую обратную связь с пользователем.
После того, как вы выполнили первоначальную проверку, поместите данные в соответствующий значимый класс данных, такой как «Оценка», где конструктор выполнит окончательную / достоверную проверку . Эта достоверная проверка должна быть настолько простой и эффективной, насколько это возможно, но абсолютно достаточной для гарантии того, что значение действительно. Это логическая проверка; данные либо действительны, либо выдается исключение, подходящее для чтения программистом. Если код проверки вашего класса данных представляет собой, например, просто совпадение с регулярным выражением, рассмотрите возможность включения имени класса данных, строки регулярного выражения и самих данных в сообщение об ошибке. Все базовые классы данных должны быть неизменяемыми, как и сам класс строки; однажды построенный, он гарантированно будет действительным и останется таковым.
Ваш предварительный код проверки может использовать или не использовать код проверки класса данных. Это зависит от того, насколько детализированы данные, которые вы собираете, и от того, сколько отзывов вы хотите отправить в пользовательский интерфейс. Точно так же более сложные классы, которые вы создаете, которые содержат классы данных в виде полей, не должны быть конструируемыми, если они не являются допустимыми. Поэтому вам может понадобиться написать код, который проверяет или пытается создать каждое отдельное поле данных, улавливать ошибки низкоуровневого построения и обрабатывать их, предоставляя более подходящую обратную связь с пользовательским интерфейсом. Иногда эта обратная связь может включать окрашивание поля в красный цвет и отображение сообщения об ошибке рядом с ним. Итак, как вы можете видеть, существует два вида проверки, и один явно более сложный из-за необходимости.