Идеологический вопрос по реализации модульности для php-фреймворка?

Я большой фанат Codeigniter, но у него, как известно, отсутствует такая вещь как HMVC (т.е. ни о какой модульности из коробки нет речи). Есть ужасные монстроподобные расширения, но мне они не нравятся.



Поэтому я пошел по пути «хочешь сделать что-тохорошо — сделай это сам». Нашел простое и элегантное решение, делающее игнайтер очень даже модульным.



Но есть несколько идеологических вопросов (которые влияют на синтаксис вызова модулей и не только), на которые я никак сам себе не могу ответить:



1. При вызове метода модуля — он обязательно должен возвращать контент (html/json/xml — не важно), или стоит предусмотреть вариант, что он вернет не контент, а данные, или просто сделает что-то и не вернет ничего?



2. Доступность модуля по URL — в передигме HMVC это одиз из атрибутов. Но меня он сильно смущает. Написать modulerouter — вообще не проблема, но я откровенно не понимаю, зачем? Для ajax-приложений? Но для таких целей, мне кажется, правильнее писать отдельный ajax-интерфейс, в котором будет только то, что нужно для приложения с обработкой post данных и т.д. и т.п. К тому же, сильно беспокоит вопрос безопасности при доступе модулейпо url. Было бы очень интересно услышать мнения на этот счет.



3. В случае REST-style вызовов модулей — как было бы лучше? modulename/methodname/viewname?param1=x?



Спасибо
  • Вопрос задан
  • 3358 просмотров
Решения вопроса 1
alekciy
@alekciy
Вёбных дел мастер
Из личной практики.

1. Модуль возвращает данные и только данные. Не важно в каком из форматов (JSON/XML/etc), главное что там нет разметки отвечающей за представления вида данных. HTTP заголовки тоже данные.

2. Ни каких отдельных интерфейсов AJAX/не-AJAX. Поэтому как с точки зрения сервера все эти запросы это HTTP запросы. И AJAX по сути существует на уровне клиента, этого слоя не должно быть в архитектуре серверной части.
Возможность доступа к модулю по URL оказывается полезной когда приложение разрастается до уровня больше чем один сервер. Если об этом не думать изначально на уровне архитектуры, то придется реализовывать «отдельный интерфейс». Если подумать сразу, то можно получить его сразу, искаропки так сказать.

3. Приведенный пример больше RPC, чем REST.

В доступе к модулю по HTTP не должно быть ни чего криминального если он реализован корректно. Дернули снаружи код модуля, а сами аутентификацию не прошли? Значит, если работаем в REST стиле, возращаем 403 статус ответа.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
MisterX
@MisterX
Если нравится Codeigniter, можете посмотреть в сторону Kohana, там есть и модульность, и HMVC
Ответ написан
ainu
@ainu
Всё имхо.
1. Иногда модуль должен делать перенаправление, не возвращая ничего. Либо возвращать JSON стакой командой.
2. Для распределённых приложений, чтобы с другой машины обращаться к первой за модулем, будучи уверенным, что данные придут. Допустим основная машина — сам сайт, вторая — модуль аукциона с высокими затратами, и она дёргается извне первой машиной.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы