Я изо всех сил пытаюсь разработать серверный сценарий, который отвечает на запросы от приложения Ajax.
В своем текущем состоянии приложение разделено на отдельные страницы (например, заказы, товары, финансы и т. Д.). Только при переключении между этими страницами реальная веб-страница перезагружается. У каждой страницы есть свой «оператор», который требуется в корень operator.php
, на который направлены все запросы Ajax.
В каждом операторе содержится этот шаблон:
foreach ($actions as $action) {
switch ($action) {
case 'get-items':
[...]
break;
case 'get-item':
[...]
break;
case 'update-item':
[...]
break;
[...]
}
}
$actions
предоставляются по запросу, например, operator.php?page=items&action=get-item&id=123
.
Поскольку приложение стало более сложным, оно помогло отделить логику каждого действия от контекста, из которого запрашивалось действие.
Я обнаружил, что часто буду использовать этот шаблон, когда хочу использовать внутреннюю логику действия в PHP:
$items = json_decode(file_get_contents('http://[...]/operator.php?action=get-items'));
(Излишне говорить, что этот дизайн создает много дополнительных накладных расходов.)
Так что вместо этого у меня теперь есть класс Operator
, который расширяется каждой страницей. Я могу, например, создать ItemOperator и напрямую вызывать нужное мне действие без какой-либо кодировки, декодирования или лишних HTTP-запросов:
$items = $itemsOperator->getItems();
Я изменил скрипт, который отвечает на запросы Ajax, для использования класса Operator, например:
foreach ($actions as $action) {
switch ($action) {
case 'get-items':
$json['items'] = $operator->getItems();
break;
[...]
}
}
if (count($json)) {
echo json_encode($json);
}
Этот подход работает достаточно хорошо, но у меня никогда не было формального обучения веб-разработке, и я подозреваю, что существуют устоявшиеся, лучше абстрагированные шаблоны (которые я безумно не могу найти в Google). Этот вопрос вдохновил меня на многочисленные недостатки моего подхода к домашнему пиву:
- Концепция класса «Оператор», который содержит «действия», слишком расплывчата и всеобъемлюща. Как мне отделить логику?
- Где подход становится особенно запутанным, когда мне нужно, например, искать базу данных товаров на странице финансов. Включаю ли я также ItemOperator вместе с FinancesOperator? (Я сейчас дублирую логику.)
- Есть ли лучший способ связать скрипт запроса Ajax с объектами Operator (при условии, что я не должен полностью сбрасывать понятие операторов)? Например, в настоящее время мне нужно написать скрипт для каждой страницы, который отображает переменную URL «action» на соответствующий метод объекта оператора.
Очень жаль, если этот вопрос слишком открытый. Вокруг меня нет разработчиков, от которых можно было бы обмениваться идеями (и, как я уже сказал, у меня не было реальных тренировок), поэтому очень важно услышать совет сообщества SO. При разработке сценария, подобного этому, количество возможностей / подходов / стратегий может быть огромным. И после того, как вы потратили пару дней на один конкретный подход, может быть очень трудно повернуть назад.
Большое спасибо за ваше внимание (и читая это далеко).