Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Флейм (http://www.flasher.ru/forum/forumdisplay.php?f=53)
-   -   Универсальный алгоритм обработки результатов (http://www.flasher.ru/forum/showthread.php?t=161181)

GBee 21.07.2011 17:23

Универсальный алгоритм обработки результатов
 
Привет.
Есть несколько тысяч операций, которые выдают результаты различного типа. Каждый результат надо обрабатывать по определенной формуле и определять хорошо или плохо. Все было просто, когда обработка была на сравнения с каким то параметром. Например результат число больше 200, или строка != "", ну и если результат массив, то обычно проверялась его длина или искался элемент в нем. Я до сих пор использовал формулы в обратной польской нотации (ОПН), куда подставлялся результат. Было более менее универсально.

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

У меня пока вариант, использовать регэкспы в довесок к ОПН, но только для строк.

alatar 21.07.2011 19:08

Написать валидаторы с стандартизированным интерфейсом, которые будут принимать параметр и выдавать результат.

Flashrunner 21.07.2011 22:14

Почитайте про шаблон Specification http://martinfowler.com/apsupp/spec.pdf

GBee 21.07.2011 23:58

Цитата:

Написать валидаторы с стандартизированным интерфейсом, которые будут принимать параметр и выдавать результат.
Хм, меня сейчас больше "начинка" валидаторов интересует. Но спасибо за совет, пригодится при рефакторинге.

Цитата:

Почитайте про шаблон Specification http://martinfowler.com/apsupp/spec.pdf
Спасибо, почитаю, отпишусь.

alatar 22.07.2011 00:38

Начинка может быть какая угодно, тут как раз нет необходимости приводить начинку к одному виду. Унификацию проверки реализует валидатор.

GBee 22.07.2011 00:44

То есть для чисел один валидатор, для строк другой, для массивов третий? Если да, имеет ли смысл дробить их еще мельче по виду проверки - отдельный валидатор для больше, отдельный для меньше, третий для равно?

alatar 22.07.2011 00:52

Именно. Имеет ли смысл дробить это тебе решать, можно и подробить.

Flashrunner 22.07.2011 01:11

Валидаторы, описанные alatar, по сути и есть Спецификации по Фаулеру.
Цитата:

Сообщение от GBee (Сообщение 1013573)
Если да, имеет ли смысл дробить их еще мельче по виду проверки - отдельный валидатор для больше, отдельный для меньше, третий для равно?

Вообще валидаторы должны отвечать только true или false, это и делает их унифицированными. В данном случае я бы наверное создал 'My'RangeValidator, если вас интересует конкретный диапазон значений.
В статье, на которую я дал ссылку, написано как удобно делать композитные валидаторы.

GBee 22.07.2011 01:19

Цитата:

Именно. Имеет ли смысл дробить это тебе решать, можно и подробить.
Ага отлично, спасибо.

Цитата:

Валидаторы, описанные alatar, по сути и есть Спецификации по Фаулеру.
Я еще не читал, английский у меня не на высоте, читаю долго со словариком. Но общий смысл я понял, идея то простая. Больше огорчает, что сам не допер, наверно с опытом придет.

Цитата:

Вообще валидаторы должны отвечать только true или false
Это как раз то, что мне нужно. Сейчас я все прогоняю через один объект, подобие большого валидатора (у меня он анализатором называется :о)) , и он возвращает бульон, как раз.


Спасибо.

alatar 22.07.2011 01:29

Цитата:

Вообще валидаторы должны отвечать только true или false
Не должны, это один из вариантов. Ничто не мешает возвращать более информативные объекты.


Часовой пояс GMT +4, время: 21:46.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.