M>>Приведенный вариант просто вернет true или false. Мой вариант вернет список не прошедших валидацию полей и всех ошибок, которые с ними связаны (правила валидации могут передаваться списком).
SR>А, ну надо было тогда в условие задачи, добавить, что правила проверки должны задаваться более-менее декларативно.
Ну, во многом в этом и состоит смысл ПМа — описывать ребуемое декларативно
M>>При этом функция остается общей и может использоваться для любых полей любой веб-формы. Без ПМа здесь только один выход — создание некоего движка правил. Но это — совсем неудобно
SR>А у вас стало быть не движок правил?
Да, действительно, я неправильно выразился. Он у меня тоже есть

Но описывается он гораздо понятнее
SR>SR> public void main() {
SR> Form form = new Form();
SR> form.put("login", "name");
SR> form.put("password", "123");
SR> form.put("password_repeated", "123");
SR> form.put("email", "name@domain.com");
SR> form.put("born_year", "1980");
SR> Object[] rules = new Object[] {
SR> "login", "length", parameters(4, 16),
SR> "password", "length", parameters(4, 16),
SR> "password", "=", parameters("password_repeated"),
SR> "email", "email", parameters(),
SR> "born_year", "<", parameters("1990")
SR> };
SR> check(form, rules);
SR> }
SR> // О боже мой, кажется, я реализовал сопоставление с образцом для списка в Java!
SR> // Этого не может быть, наверное я сплю.
SR> private void check(Form form, Object[] rules) {
SR> for (int index = 0; index < rules.length; index += 3) {
SR> String field = rules[index].toString();
SR> String rule = rules[index+1].toString();
SR> Object[] parameters = (Object[])rules[index+2];
SR> check(form, field, rule, parameters);
SR> }
SR> }
SR> private void check(Form form, String field, String rule, Object[] parameters) {
SR> if (rule.equals("length")) {
SR> int min = (Integer)parameters[0];
SR> int max = (Integer)parameters[1];
SR> checkLength(form.get(field), min, max);
SR> }
SR> ...
SR> // остальной код в той же мере тривиален
SR> }
SR>
Правильно. И такой код придется писать каждый раз заново для любой более-менее тривиальной смены структуры передаваемых данных.
То есть. Для
исхдного примераАвтор: z00n
Дата: 14.12.07
придется реализовывать метод equals для term, для моего примера — целую отдельную функцию, эмулирующую сопоставление с образом, для
менее тривиального примераАвтор: z00n
Дата: 24.04.08
придется еще как-нибудь изворачиваться. А ПМ позвлит все задачи решить декларативно. Это не магическая пуля, конечно, писать все равно придется

Но каждый раз это будет легко и — главное! — одинаково.
Просто if поможет только сравнить значения. ПМ позволит
наглядно сравнить и структуру и значения.
... << RSDN@Home 1.2.0 alpha 4 rev. 1084>>