Должен ли я использовать классы или модули для разделения задач на прикладных уровнях моего бэкэнда node.js Firebase Cloud Functions? - PullRequest
0 голосов
/ 19 января 2020

Допустим, я хочу написать многослойный микросервисный бэкэнд для веб-приложения. Когда новый пользователь создается в auth, он запускает onCreate, который имеет следующие цели:

  • отправка подтверждающего электронного письма
  • запись документа пользователям / коллекции
  • написать первоначальные пользовательские утверждения пользователю auth

Я видел много примеров, когда каждый метод находится в классе, и DI используется для предоставления зависимостей для конструкторов. Я не понимаю, почему кто-то сделал бы это, вместо того, чтобы просто импортировать функции и использовать их по мере необходимости.

Сначала я хотел написать что-то вроде этого:

import userService from '../services/user'
onCreate((user, context) => {
  const newUserService = userService().newUserService();
  // The above is a function which instantiates the class, ie new NewUserService()

  newUserService.verifyInput(user, context);
  newUserService.verifyEmail(user, context);
  newUserService.writeDocument(user, context);
  newUserService.writeClaims(user, context);

});

Конструктор Никаких параметров. Зачем вообще использовать классы и объекты? Обычно мне нужен только один экземпляр, один экземпляр, для каждого триггера, если только это не многопользовательское действие (сообщение чата или транзакция).

Почему бы мне просто не импортировать / экспортировать функции, которые делают то, что я нужно, например:

import * as newUser from '../services/user/create';
...onCreate((user, context) => {

  newUser.verifyInput(user, context);
  newUser.verifyEmail(user, context);
  newUser.writeDocument(user, context);
  newUser.writeClaims(user, context);

});

Я также хочу уточнить, как я должен обрабатывать входные параметры. Если бы я использовал классы, я мог бы предоставить их один раз конструктору, например:

const newUserService = new NewUserService(user, context);
newUserService.validate()
newUserService.writeDocument();
newUserService.writeClaims();

ВОПРОС: Должен ли я использовать классы с DI, и если да, то как бы я это структурировал? Или я должен просто придерживаться модулей с коллекциями функций?

...