@Urukhayy

Уровни абстракции или можно ли так сокращать объём кода?

Задача:
Есть back-end на Node + Express. Нужно реализовать возможность CRUD для трёх коллекций (human, tree, planet) в Mongo. Все запросы на работу с коллекцией приходят из HTTP-запросов, через Express. Каждая коллекция имеет разное количество полей.
Есть два варианта реализовать:

1. Создавать 3 * 4 роутера (router.get(/create-planet), (/update-planet) и т.д.) в Express, и так же создавать 3 * 4 функции для работы с Mongo. В общем вручную прописывать db.collection.insert множество раз, и так со всеми видами операций.

2. Повысить уровень абстракции, и создать всего 1 роутер (router.post(/multi-router)) и 1 супер-абстрактный метод для работы с БД. В этот роутер будет приходить JSON, который будет содержать вид операции, название коллекции и данные для операции. А универсальный метод будет парсить JSON, извлекать вид операции и вставлять в запрос к БД:

db.collection[operationString]{operationParams} // псевдокод


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

В общем второй способ подразумевает, что программа будет сама себя "создавать" во время работы, всего несколько строк кода, и всю работу сделают входные данные. Зато нет рутины и не нужно копипастить строки кода с повторяющимися вызовами. Нормально ли это? Или как правильно?
  • Вопрос задан
  • 610 просмотров
Пригласить эксперта
Ответы на вопрос 4
@abberati
frontend-разработчик
Второй вариант дьявольски небезопасен, т.к. от клиента может придти что угодно. + вы просто переносите сложность с сервера на клиент.
Ответ написан
@d1skort
junior
А что вы делать будете, когда окажется, что например нельзя удалять планету?

А если окажется что у людей можно апдейтить только фамилию, но не количество рук?
Ответ написан
Комментировать
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Нормально. Только может лучше взять restify?

P.S. вру, рестифай это тот же экспресс, вид сбоку. Вот: loopback.io/getting-started
Ответ написан
Комментировать
Если у вас проект, где реально все объекты одинаковые с точки зрения обработки сервером - то можно и универсально сделать. Но обычно так не бывает - обычно для каждого объекта нужно проверять взаимосвязи, права доступа, чего-нибудь вычислять, что клиент не прислал и т.п. Поэтому, в реальном проекте - однозначно более простой, но более длинный вариант с 3 контроллерами.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы