![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| zxmaster |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 31.1.2006 Репутация: 1 Всего: 1 |
Линейное программирование в серьезных веб-проектах - это великое зло, особенно когда комметарии не писать
Основу идеи я нашел где-то в сети. В обыкновенный цикл do while($var/*false по умолчанию*/) заключался switch, в результате этого исполняемая функция могла поменять параметры для switch и while и тогда цикл отрабатывал еще один раз и switch выбирал другую функцию. Я пошел немного дальше. В итоге был сделан класс в основе работающий по данному принципу. Работа класса: Существует входящий параметр (get или post) который запускает выбор функций, если его нет - обрабатывается функция по умолчанию. После отработки функция возвращает битовую маску, на основании которой класс решает, что делать дальше. Елси функция не возвращает значения класс считает, что она отработала не правильно и генерирует сообщение об ошибке. Установление имени входящего параметра просходит при создании класса RUN::RUN(string param_name) /*данная переменная будет искаться в $_REQUEST*/ Класс работает с несколькими видами функций. 1. Стандартная функция 2. Функция по умолчанию 3. Функция обработки текстового сообщения 4. Функция обработки пользовательского сообщения 5. Функция отрабатывающая при определенном запросе 1. RUN::set_action(string function_name, string param_value) /*имя функции и значение параметра вызывающего ее*/ Прототип вызова стандартной функции function_name($this_action, $new_action, $txt_message) /*$new_action и $txt_message передаются по ссылке */ Описание параметров $this_action - значение переменной которое сгенерировало вызов функции. $new_action - новое действие (см. ниже) $txt_message - текстовое сообщение о результате работы функции (см. ниже) 2. RUN::set_default(string function_name) Прототип вызова function_name(void) 3. RUN::set_log(string function_name) Прототип вызова function_name(array/string message) 4. RUN::set_message(string function_name) // пока не доработанно // 5. RUN::set_raction(string function_name, string param_value) Прототип вызова function_name(string $rname, string $rvalue, string $txt_message) $rname - имя параметра который вызвал функцию $rvalue - значение этого параметра $txt_message - текстовое сообщение о результате работы функции (см. ниже) Битовая маска возвращаемых значений (значения можно комбинировать с помощью '|') RUN_OK - функция отработала нормально RUN_DEFAULT - После отработки данной функции запустить функцию по умолчанию RUN_AGAIN - запустить выбор фукции снова ($new_action должен быть установленн в значение не равноте текущему ($this_action)) RUN_LOG - Запустить обработку текстового сообщения от данной фукции сразу после ее выполнения ($txt_message должно быть определено) По умолчанию функция в результате своей работы может определять $txt_message это сообщение добавляется в общий массив который передается пользовательской фукции, вызываемой в самом конце работы класса. Что такое RUN::set_raction(string function_name, string param_value)? Это функция, которая отрабатывает перед стандартными функциями RUN::set_action. Обаботка включается тогда, когда во входящих данный присутствует параметр с именем param_value. Сообщения RUN_DEFAULT и RUN_AGAIN от данной функции не обрабатываются. Зачем нужна функция обработки пользовательского сообщения? Идея проста только первые биты возвращаемые после работы функции используются классом, а остальные можно передавать какому-либо обработчику. Я думаю что последних 16 бит будет вполне достаточно 0xFFFF0000. Причем можно будет передавать как число, так и маску. Вот пример роаботы класса Жду ваших комметариев или пожеланий. Может идею мне подкините
|
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 8 Всего: 261 |
По-моему, просто надо проектировать грамотно и правильно. Все ошибки идут от неправильного проектирования, а если копать глубже - плохо поставленной задачи. |
|||
|
||||
| zxmaster |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 31.1.2006 Репутация: 1 Всего: 1 |
А вот этот класс и есть пример правильного проектирования и удобной расширяемости Это сообщение отредактировал(а) zxmaster - 4.2.2006, 16:03 |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 8 Всего: 261 |
Да, но это ИМХО, говорит о том, что система изначально была спроектирована не очень хорошо, касательно дальнейшей расширяемости. Другое дело, когда расширять надо координально...
ИМХО, конечно, но как-то мне кажется, что это ну не то, чтобы лишнее, а, я бы сказал, явно слишком усложненное... Хотя может я и не до конца понял сути. |
|||
|
||||
| beroal |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 18.1.2003 Где: Украина Репутация: нет Всего: 3 |
Всё-таки хотелось бы увидеть пример более приближённый к реальности. Например, как это можно применить на сайте? В начале статье вы про это пишете (там где про switch), но как-то очень кратко.
|
|||
|
||||
| zxmaster |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 31.1.2006 Репутация: 1 Всего: 1 |
Товарищи программисты, суть здесь в том, что бы удобно переключать поток вызова функций. Запускать одни функции по алгоритму свича, а другие при наличии определенных входящих параметров (post или get), а может еще и совместить эти две процедуры
Кто хочет понять как работает этот класс пусть возмет мой код и попытаеться исполнить его на совоей машине. Причем разбираться в коде я вам советую после строчки // Class End // Подсказка: в данном случае обработчик реагирует на переменную в post или get под именем "mode" (значения "a" или "b") |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Для профи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |