На данный момент у нас очень тяжелый фронтенд (на самом деле фронтенд + бэкэнд в одном приложении).Интерфейс содержит всю логику: пользовательский интерфейс, бизнес-логику, логику персистентности и так далее.Его очень сложно и сложно поддерживать из-за некоторых проблем с платформой (написанных на PHP), таких как, например, отсутствие пула соединений.
Так что мне пришла в голову идея разделить интерфейс и бэкэнд.Бэкенд может быть написан на более удобной платформе (мы планируем использовать Java), а веб-интерфейс может продолжать использовать PHP.
Я думаю, что логика пользовательского интерфейса - это все, что должен делать веб-интерфейс.И некоторые ограничения должны быть применены к базе кода, которая выполняется здесь:
- Нет прямых вызовов базы данных.Вызовы БД сложно масштабировать и трудно обеспечить SLA.
Неблокируемый интеграционный протокол для бэкэнда.Если веб-интерфейс запрашивает что-то для бэкэнда, он должен иметь возможность не блокировать этот запрос.Это может помочь нам двумя способами:
a.мы можем отправлять параллельные запросы в бэкэнд (распараллеливать ввод / вывод);
b.мы можем предоставить тайм-аут для запросов (SLA).Иногда лучше быстро потерпеть неудачу и не блокировать клиент.
Итак, учитывая все вышесказанное, я считаю, что лучшая архитектура для интерфейса (в моем случае я не распространяю серебряную пулю)это логика пользовательского интерфейса, которая связывается только с бэкэндом REST / SOAP неблокирующим способом.Что вы думаете об этом материале?