Шаблон проектирования - проверка входных параметров и создание класса-держателя, J2SE (без каркасов и т. Д.) - PullRequest
2 голосов
/ 03 ноября 2011

Сценарий: мы получаем пару входных параметров, относящихся к объекту, например, для курса

В курсе есть имя преподавателя, количество студентов, время курса, номер комнаты и т. Д.

Нам нужныпроверить (количество учеников> 0, 9 утра <время <9 вечера и т. д.) входные данные и создать объект.Нам нужно вернуть источник ошибки для неверного ввода.</p>

Я мог бы подумать о двух подходах

1) Создать отдельный класс Validator со статическими методами,

  • validate input, (validate метод возвращает true или некоторое перечислениекак VALID, INVALID_TIME, INVALID_STUDENT_NUMBER).
  • создание экземпляра Бина, если ввод действителен.

cons:

  • Если нам нужно обработать входные значения перед их проверкой, приведенный выше шаблон приводит к тому, что он выполняется дважды, если вход действителен, один раз в классе Validator, иоднажды до установки бобов.Мы не можем вернуть объект Bean, поскольку метод validate должен возвращать источник ошибки в случае недействительности.

2) Имейте метод validate внутри самого класса Bean, возвращайте исключение для неверного ввода.Проследите источник ошибки через различные типы исключений.

cons:

  • необходимо создать несколько пользовательских исключений.
  • Правильный ли способ включить метод validate в сам объект-держатель ??

Я исследовал несколько шаблонов проектирования, но они не были связаны.

Пожалуйста, помогите мне понять плюсы и минусы вышеупомянутых подходов, и лучше следовать.

Ответы [ 2 ]

2 голосов
/ 30 ноября 2011

Один из комментаторов указывает: «Вы захотите получить набор ошибок валидации». Это важно.

По моему опыту, методы валидации внутри их модельных объектов не работают, потому что логика валидации часто меняется и потому, что что-то, что недопустимо при одном наборе обстоятельств, допустимо при другом наборе обстоятельств. Например, если метод проверки считает что-либо недопустимым после 9 часов вечера, администратор школы может изменить правила так, чтобы курсы в течение летнего квартала продолжались до 23 часов. Вы не хотите застрять с вашим методом проверки в вашем классе, когда такое происходит, как это неизбежно происходит.

Кроме того, зачастую невозможно проверить объект, не зная о состоянии других объектов в системе. Например, если у вас есть объект ссуды, значения ссуды, превышающие 100 000 долл. США, могут быть недопустимыми, ожидайте, когда объект Customer имеет тип Institution. Вам необходимо знать об объектах «Заем» и «Клиент», чтобы правильно проверить Заем.

Лучшие практики, которые я видел для комплексной проверки:

  1. Допустимые простые вещи до принятия объекта. Это включает проверку на наличие недопустимых символов или нецифровых числовых полей.

  2. Создание структуры проверки, которая проверяет группу зависимых объектов одновременно. Не останавливайте процедуру проверки при первой обнаруженной ошибке. Вместо этого создайте класс с именем ValidationError, и ваша платформа создаст коллекцию этих объектов. Этот подход позволяет вам учитывать внутриобъектные и межобъектные зависимости. Кроме того, вы можете сразу представить все ошибки пользователю, вместо того, чтобы заставлять его исправлять ошибки по одному.

  3. Не задавайте жесткие значения кода, такие как минимальный-числовой-студенческий или последний-минимальный класс. Вместо этого поместите эти значения в таблицу реляционной базы данных или файл конфигурации. Заставьте платформу проверки искать правильные значения (и затем кэшировать их). Когда значения меняются (как это часто бывает), вам нужно всего лишь обновить файл или базу данных; нет необходимости перестраивать и заново развертывать все приложение. Когда я делал эту работу, я программировал на Smalltalk. Если вы используете динамический язык, такой как Smalltalk или Ruby, легко поместить исходный код в вашу базу данных как «блок проверки» и выполнить его во время выполнения.

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

0 голосов
/ 03 ноября 2011

Как указано выше, есть абсолютная масса способов сделать что-то подобное.

Если бы я реализовывал что-то подобное, я бы посмотрел эту статью http://java.dzone.com/news/factories-builders-and-fluent- о плавных интерфейсах в сочетании с шаблоном строителя.

Возможно, это соответствует вашим потребностям. Обратите особое внимание на проверку части боба.

Надеюсь, это поможет.

...