Допустим, в моем внутреннем API определены следующие константы:

User::USER_ROLE_NORMAL; // Equal to 0
User::USER_ROLE_ADMIN; // Equal to 1

Теперь в моем бэк-энде я могу сделать следующие сравнения:

if($user->role == User::USER_ROLE_NORMAL)

Какова лучшая практика, когда я должен применять логику в своем интерфейсе? (где эти константы неизвестны)

Неверно кодировать числа в интерфейсе, например:

if(ajaxData.role == 0)

Для контекста: мне нужно применить логику во внешнем интерфейсе на основе изменения макетов

4
Musa 20 Авг 2018 в 17:08

3 ответа

Лучший ответ

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

Способ сделать это зависит от вас (можно найти много хороших альтернатив).

(Простой) подход может быть с некоторыми глобальными переменными или с использованием какого-либо сервиса, если вы используете какую-то инфраструктуру.

Что-то типа:

const role {
  USER_ROLE_NORMAL: 0,
  USER_ROLE_ADMIN: 1,
};

Затем вы можете использовать их следующим образом:

if(ajaxData.role == role.USER_ROLE_NORMAL) {}

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

4
lealceldeiro 20 Авг 2018 в 17:43

Первым решением было бы создание другого файла, для использования javascript внешнего интерфейса, определяющего константы. Но это имеет большой недостаток: вам нужно убедиться, что оба файла (константы внешнего интерфейса и константы внутреннего интерфейса) совпадают. Если вы измените один, вам придется помнить, чтобы изменить другой.

Но, во-первых, обратите внимание, что этот недостаток также существует, если вы просто жестко программируете константы в первую очередь (это ужасно, и абсолютно не вариант).

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

При разработке javascript очень часто иметь шаг сборки: Webpack, Grunt, Gulp и т. Д. Если у вас уже есть один из них, добавьте на шаг сборки скрипт, который автоматически генерирует файл констант внешнего интерфейса.

Если у вас нет шага сборки в процессе разработки, самое время начать.

0
Pedro A 20 Авг 2018 в 14:58

Вы также можете сгенерировать содержимое файла JS со всеми константами, используя backend. Таким образом, вы управляете этими данными в одном месте, что может быть полезным.

1
Tunker 20 Авг 2018 в 14:26
51932589