ООП / MVC совет о том, где разместить глобальную вспомогательную функцию - PullRequest
3 голосов
/ 11 мая 2010

У меня на сайте есть пара контроллеров, которые обрабатывают данные формы. В формах используется AJAX, и у меня есть довольно много методов на разных контроллерах, которым приходится выполнять определенную обработку для возврата ошибок в формате JSON - см. Код ниже. Очевидно, что это не СУХОЙ, и мне нужно переместить этот код в одну вспомогательную функцию, которую я могу использовать глобально, но мне интересно, где это на самом деле должно идти! Должен ли я создать статический вспомогательный класс, который содержит эту функцию (например, Validation :: build_ajax_errors ()), или поскольку этот код создает формат, специфичный для приложения и связанный с используемым плагином проверки jQuery, должен ли он быть статическим метод, хранящийся, например, в моем главном контроллере веб-сайта, с которого распространяются контроллеры обработки форм?

               //if ajax request, output errors
                if (request::is_ajax())
                {
                    //need to build errors into array form for javascript validation - move this into a helper method accessible globally
                    $errors = $post->errors('form_data/form_error_messages');

                    $i = 0;
                    $new_errors  = array();
                    foreach ($errors as $key => $value)
                    {
                        $new_errors[$i][0] = '#' . $key;
                        $new_errors[$i][1] = $value;
                        $new_errors[$i][2] = "error";
                        $i++;
                    }

                    echo '{"jsonValidateReturn":' . json_encode($new_errors) . '}'; 

                    return;
                }

1 Ответ

2 голосов
/ 11 мая 2010

ИМХО, ваш вопрос сводится к вопросу о стиле персонального программирования. Когда я определил фрагмент кода, который необходимо реорганизовать для соответствия принципу DRY, я не всегда реорганизую его таким же образом.

Если я правильно понимаю, вам нужна эта функция / метод в ваших классах форм, и все эти классы форм расширяют один и тот же базовый класс форм. В этом случае я бы продвинул рассматриваемый метод в суперкласс (я знаю, что вы упомянули, что хотите, чтобы метод был доступен «глобально», но остальная часть вашего варианта использования, похоже, подразумевает, что функция / метод будет используется в ваших классах формы.).

Когда у меня действительно есть вспомогательная функция, которая мне нужна во всем приложении (и я уверен, что ее больше некуда поместить), я помещаю ее в точку входа приложения. Используя MVC Zend Framework, этой точкой входа будет public index.php (все запросы направляются через index.php, что делает его логическим местом для глобальных функций). Внизу этого файла я всегда добавляю некоторые вспомогательные функции, чтобы сэкономить время при отладке. См. " Самая полезная функция, которую вы когда-либо использовали.. " в качестве примера.

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