Избегает ли поднимать событие, когда оно не требуется, считается преждевременной оптимизацией?

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

Например, допустим, что вход не должен превышать 3 символа и должен содержать только нечисловые символы. Теперь предположим, что пользователь вводит 4 числовых символа. ValidityChanged, и пользователь уведомляется об обеих ошибках. Однако он добавляет другого персонажа. Ошибки точно такие же (длиннее 3 символа, содержит числовые символы), поэтому не должно быть дополнительного уведомления.

В таком случае, должен ли я даже поднять ValidityChanged? Или сначала нужно проверить, будут ли новые ошибки такими же, как и предыдущие, и поднять это событие только в том случае, если ошибки отличаются или это преждевременная оптимизация?

3 голоса | спросил Sipo 15 FriEurope/Moscow2017-12-15T15:47:25+03:00Europe/Moscow12bEurope/MoscowFri, 15 Dec 2017 15:47:25 +0300 2017, 15:47:25

2 ответа


2

Все, что имеет значение, - это почему вы поднимаете событие ValidityChanged.

Как следует из названия, это означает, что элемент управления «действует» как «недействительный» или наоборот. Что вызывает , это изменение не имеет значения; тот факт, что он имеет изменен, - это все, что имеет значение для события.

Если вы поднимаете эти события по мере того, как пользователь набирает , то вероятность того, что они скоро получат некоторые из этих событий. Это только проблема, если потребитель этого события делает с ним что-то «глупое», например, отображает диалог, если элемент управления недействителен, но - «Хорошая новость» - это не проблема [немедленная].

  

... говорят, что пользователь вводит 4 числовых символа.

Удивительно, но пользователь не может [легко] сделать это. Они могут вводить один символ, за которым следует другой, за которым следует другой (если только они не вставляют в полное, новое значение) за один раз). Каждый измененный [один символ] проверяется элементом управления и оценкой его общей достоверности. Если это значение изменит , вы поднимите событие.

Возможно, ваша трудность заключается в том, что вы запрашиваете событие ValidityChanged как слишком полезно и пытаетесь «объяснить», что не так с элементом управления.

Я бы предположил, что это задание свойства separate в элементе управления, которое описывает ошибку [s], поражающую элемент управления в это время. Любой обработчик события ValidityChanged сможет изучить это свойство для деталей gory.
Кроме того, ваше событие ValidityChanged может включать те [изменяющие] ошибки, но тогда вы должны поднять это событие каждый раз, когда эти ошибки меняются, а также для общей «действительности» элемента управления.

ответил Phill W. 15 FriEurope/Moscow2017-12-15T16:21:29+03:00Europe/Moscow12bEurope/MoscowFri, 15 Dec 2017 16:21:29 +0300 2017, 16:21:29
1

Я бы не поднял ошибку в первую очередь.

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

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

Только при отправке формы поднимите ее как ошибку. Потому что это ошибка, чтобы попытаться отправить неверно проверенные данные. (Я использую это слово, чтобы показать, что данные проверены, но не прошли проверку, которая отличается от неаудированных данных)

ответил Pieter B 15 FriEurope/Moscow2017-12-15T16:02:19+03:00Europe/Moscow12bEurope/MoscowFri, 15 Dec 2017 16:02:19 +0300 2017, 16:02:19

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132