Расположение метода проверки ввода данных веб-приложения Java - PullRequest
0 голосов
/ 05 августа 2010

Где мне найти код для проверки идентификатора сотрудника (значка), который будет введен в несколько HTML-форм через мое приложение?

В настоящее время он у меня есть в STKUserForm.java, который используется, когда люди входят в систему (authenticateUser) или запрашивают свой пароль (requestPassword).Это прекрасно работает до сих пор.Я должен отправить большое спасибо BalusC.Многое из того, над чем я работаю, основано на его блоге DAO / Servlets.Спасибо BalusC !!!!!!!!!!

Но теперь я создаю другой вариант использования помимо входа в систему, где руководитель назначает сотруднику задачу (CommitmentItemForm.java), вводя значок сотрудника.,Я бы предпочел не дублировать свою бизнес-логику (когда-нибудь действительный значок может иметь 7 цифр), поэтому я чувствую, что мне нужно удалить его из STKUserForm.

STKUserForm.java - вызывается со страницы входа в систему (сервлетом), и оба упомянутых выше метода вызывают processBadge, который затем вызывает метод validateBadge.

public final class STKUserForm extends Form {
    public STKUser authenticateUser(STKUser LoginUser) {
        <snip> 
            processBadge(LoginUser.getBadge());
        <snip>
        return authenticatedUser;
    }
    public void requestPassword(STKUser loginUser) {
        <snip> 
            processBadge(LoginUser.getBadge());
        <snip>
    }

public void processBadge(String badge) throws DAOException {
    try {
        validateBadge(badge);
    } catch (ValidatorException e) {
        setError(FIELD_USERBADGE, e.getMessage());
    }
}

public void validateBadge(String badge) throws ValidatorException, DAOException {
    if (badge != null) {
        if (!FormUtil.isBadge(badge)) {
            throw new ValidatorException("Please enter valid badge (6 digits, numbers only, and no 'E').");
        } else if (!STKUserDAO.isValidEmployee(badge)) {
            throw new ValidatorException("This is not a valid badge of any EB Employee.");
        }
    }
}
}

Так куда мне переместить метод validateBadge ??STKUser bean ??FormUtil ???Какой-то другой служебный класс ???Я не уверен, потому что он звонит в STKUserDAO.Я хочу проверить значок сотрудника для многих случаев использования через это и другие приложения.

Ответы [ 2 ]

0 голосов
/ 05 августа 2010

Одним из решений является сделать bade id объектом значения домена:

public final class BadgeId {
   private final String value;
   public BadgeId(String value) {
      if(value not valid badge id) throw IllegalArgumentException("invalid: " + value);
      this.value = value;
   }
   public String getValue() {
      return value;
   }
   // equals and hashcode
}

Теперь вы можете использовать BadgeId вместо String во всех ваших методах.Для удобства форма Action может иметь метод getBadgeId (): BadgeId.Поскольку BadgeId является неизменным, а конструктор обеспечивает корректность, вам никогда не придется беспокоиться о летающих недопустимых объектах BadgeId.

Если это звучит странно, подумайте о таких классах JDK, как Integer, Float и т. Д.не должно существовать.Мы могли бы просто передавать объекты String и вызывать Float.validate (String) и Float.isValid (String) и т. Д. Вместо этого были созданы доменные объекты для построения программирования (Float, Double и т. Д.).

Еще один полезныйМетод для класса BadgeId может быть:

public static BadgeId toBadgeId(String value) { ... }

Если вы ожидаете иметь много типов объектов BadgeId, все с разными правилами проверки, вы можете использовать что-то вроде:

public abstract class BadgeId {
    ... same constructs / methods as before except ...

    protected abstract boolean isValid(String value);
}

public final class NumericBadgeId extends BadgeId {
    public NumericBadgeId(String value) {
        super(value);
    }
    protected boolean isValid(String value) {
        return true if value contains all numbers; false otherwise
    }
}
0 голосов
/ 05 августа 2010

Я хотел бы, чтобы STKUserDAO.isValidEmployee () предоставлял все функциональные возможности метода STKUserForm.validateBadge (), вместо этого генерировал исключения внутри STKUserDAO.isValidEmployee (). Тогда ваша проверка будет доступна везде, где вы обращаетесь к БД.

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