Являются ли параметры действия плохим дизайном / архитектурой? - PullRequest
2 голосов
/ 20 марта 2011

Этот вопрос может быть применен к любому языку программирования, но, поскольку я думаю о PHP, я сформулирую его соответствующим образом ...

Мне интересно, считается ли это плохим дизайном / архитектурой, если веб-приложение использует параметры действия, а не отдельные файлы для каждого действия.

Например: /index.php?action=edit

Против

/ edit.php или /index/edit.php

Я знаю, что mod_rewrite может преобразовать симпатичный URL в параметризованный URL, но я стараюсь избегать ненужных сложностей, когда в этом нет необходимости.

Спасибо.

Ответы [ 6 ]

4 голосов
/ 20 марта 2011

Довольно часто, для больших приложений, (особенно с Frameworks, такими как Symfony, Zend Framework, ...) мы склонны использовать одну точку входа: index.php.

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

Итак, для краткости: нет, использование параметров действий - это не плохой дизайн / архитектура.
Конечно, это зависит от типа приложения - но, вообще говоря, иметь уникальную точку входа - неплохая идея.

1 голос
/ 20 марта 2011

Я бы назвал оба ваших примера, по крайней мере, устаревшими или лишенными наилучшей практики.

/ index.php? Action = edit

Не выглядит хорошо ипоэтому не является дружественным к пользователю и не является дружественным к SE.

/ edit.php

Означает, что для каждого действия действительно существует отдельный файл, который явно является плохимпрактиковаться в 21 веке, когда у нас есть отличные MVC-фреймворки, которые позволяют нам избавиться от этого беспорядка и разделить проблемы.

Хороший URL выглядит, например, так:

mysite.com/user/profile/edit

означает, где находится пользовательский модуль, контроллер пользовательского профиля и действие редактирования.

1 голос
/ 20 марта 2011

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

Я предпочитаю стиль MVC-кодирования , который разделяет PHP и HTML друг от друга настолько, насколько вы «хотите».

Надеюсь, это полезно:)

1 голос
/ 20 марта 2011

В этом нет ничего плохого, оба могут быть в порядке

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

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

Я просто должен предупредить вас, что вы не можете использовать это действие глупо, делая include $_GET['action'] в середине основного файла 'design'. это и небезопасно, и ненадежно.

0 голосов
/ 20 марта 2011

Об использовании mod_rewrite : mod_rewrite не был создан и не должен использоваться как часть вашей архитектуры PHP.

О наличии одного файла на логический элемент . Это очень хороший и практичный способ разделения логических единиц в вашем приложении. Это гораздо лучше, чем создавать огромные файлы со множеством смешанной логики, которые станут непригодными к использованию по мере роста приложения. Это не противоречит наличию одной точки входа и архитектуры MVC.

Наличие параметров действия является наиболее нормальным подходом для контроллеров CRUD, например, когда имеет смысл сгруппировать действия в общий контроллер

// blog controller
-> create blog entry 
-> edit
-> view
-> delete
-> list  ( this is a very common addition to CRUD

Все это имеет общую архитектуру в том смысле, что почти все принимают идентификаторы и делают связанные вещи.

Если вы говорите строго о параметрах GET, то вы увидите, что создание среднего / большого приложения, в котором вы направляете все из файла, и единственное, что меняется, - это параметры get, которые очень быстро перерастут вас. Компьютерная архитектура похожа на настоящую архитектуру, попробуйте разбить ее на маленькие, простые (возможно, многоразовые) блоки.

0 голосов
/ 20 марта 2011

Это зависит от ваших требований и масштаба.

Использование отдельных файлов - это нормально.Тем не менее, вы, вероятно, обнаружите, что копируете код и неправильно используете код и методы.Это легче сделать с небольшими специализированными приложениями, но со временем вполне может превратиться в код спагетти или в гнездо джунглей.

Если вы используете одну точку входа (загрузка классов с помощью обработчиков URL), вынужно узнать, как это работает ( CodeIgniter и ExpressionEngine - это хорошие системы MVC, если вы еще не очень хороши в этом), но они более последовательны в практике кодирования, имасштабируется лучше, чем куча отдельных страниц или оператор switch(), через который вы все проходите.

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

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