Хорошая структура класса для очистки и использования ввода? - PullRequest
2 голосов
/ 23 мая 2010

Я хочу быть полезным для пользователей системы, поэтому перед тем, как протестировать, можно ли немного почистить вводные данные. Итак, у меня есть такой поток:

  1. Ввод: aa12345b
  2. Очистить ввод как-то: 12345
  3. Проверка допустимости чистого ввода
  4. Использовать ввод, если он действителен

Теперь я хочу сделать это в прекрасном OO-стиле (IoC, интерфейсы, тестируемые, без статики, вы знаете). Любые идеи, как организовать структуру класса для этого? Хорошо ли иметь класс Cleaner и Parser / Validator по отдельности или поместить их как методы в сам класс данных? Спасибо за любую помощь или обсуждение по этому поводу, и дополнительное спасибо, если ответ на C #!

Ответы [ 2 ]

3 голосов
/ 23 мая 2010

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

Вы должны предположить, что если пользователь ввел неправильную вещьони либо

  1. неправильно набрали
  2. Не поняли требования к вводу
  3. Преднамеренно вошли в злоумышленники, ищущие ненадлежащую проверку и обнаруживающие уязвимости в вашем программном обеспечении впредварительное расследование, прежде чем пытаться взломать его.

Для вариантов 1 или 3 вам лучше дать полезное сообщение пользователю и попросить его повторно ввести ввод.Для варианта 3 вы бы поощряли потенциального злоумышленника, не используя передовой опыт.

1 голос
/ 23 мая 2010

Я согласен с Дэвидом Стратоном, это, как правило, не очень хорошая идея, но в конечном итоге выбор за вами.

Я бы лично написал методы как методы расширения для класса String. в этом случае ваши методы будут отображаться как часть методов экземпляра System.String.

InputTextbox.Text.ParseNumerics();


public static int ParseNumerics(this String str)
{
        //return parsed string
}

http://msdn.microsoft.com/en-us/library/bb383977.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...