Лучшая практика - проверка ввода в простом приложении с графическим интерфейсом? - PullRequest
2 голосов
/ 22 марта 2010

Я пишу приложение с графическим интерфейсом с wxwidgets на C ++ для одного из моих классов программирования. Мы должны проверить ввод и выдать пользовательские исключения, если они не удовлетворяют определенным условиям. Мой вопрос в том, что является лучшей практикой, когда дело доходит до этого? Должен ли я написать отдельную функцию, которая проверяет наличие ошибок, и чтобы мой обработчик событий вызывал эту функцию? Или я должен выполнить проверку ошибок в моих обработчиках событий? Или это действительно имеет значение?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 22 марта 2010

Создание исключений для этого кажется немного странным.

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

ПроверкаЭто также можно сделать до нажатия кнопки ОК, но это не должно препятствовать вводу данных, а только указывает на проблему (и, возможно, отключить кнопку ОК, пока она не будет устранена).По сути, непоследовательное значение, введенное в этом элементе управления, может не быть непоследовательным после того, как пользователь отредактировал значение в следующем элементе управления, к которому он перемещается.

Старайтесь избегать окон сообщений для сообщения об этих ошибках - строка состояния илиТекстовый элемент управления только для чтения внутри формы лучше.

Должна быть определена функция / метод, который выполняет все проверки непротиворечивости формы, но он не должен выдавать исключение.Плохой ввод не является «исключительным» случаем от обычных пользователей - это происходит постоянно, особенно когда я пользователь.Более того, вы должны использовать исключения только тогда, когда обработка ошибок в противном случае испортит структуру вашего кода, чего не должно быть в случае, если «данные в этой форме в порядке - да, хорошо, примите и закройте»обработчик события.

Функция должна просто возвращать код ошибки, чтобы указать, какую ошибку сообщить, или сообщить об ошибке и вернуть флаг ошибки.

Не так давно wxWidgets не былдаже исключительная безопасность - IIRC, вы все равно должны включить защиту от исключений в качестве опции при сборке библиотеки.

0 голосов
/ 22 марта 2010

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

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

...