Изменить дизайн класса системы отправки электронной почты, чтобы включить возможность отправки сообщений нескольким получателям - PullRequest
0 голосов
/ 01 мая 2020

Добрый день) Мне нужна помощь для принятия правильного решения, какой шаблон я должен использовать или как я должен изменить свою структуру классов, чтобы сделать код более пригодным для повторного использования.

Итак, у меня есть маршрут, который отправляет процесс запрос по электронной почте одному получателю. Мы обрабатываем два типа электронных писем: SYSTEM и NON_SYSTEM. Процессы этих двух типов немного отличаются.

Контроллер:

async send(
    @Body() body: SendSystemMessageDto | SendNonSystemMessageDto,
    @User() user: User,
    @Applet() appletName: string,
  ) {
    let sendResponse = null;

    const emailSendPayload = {
      ...body,
      ...body.details,
    };

    if (appletName && body.type === MESSAGE_TYPE.SYSTEM) {
      sendResponse = await this.emailSystemSendService.send({
        uid: appletName, 
        ...emailSendPayload 
      });
    } else if (body.type === MESSAGE_TYPE.NON_SYSTEM) {
      sendResponse = await this.emailPersonalSendService.send({ 
        uid: String(user.uid), 
        ...emailSendPayload 
      });
    }

    return { success: true, ...sendResponse };
}

Эта функция выше отправляет электронную почту только одному получателю.

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

Итак, в теле запроса мы отправляем массив receientsAddresses с электронными письмами. А затем вызовите предыдущую функциональность в l oop.

Кроме того , если тип электронной почты === NON_SYSTEM и мы хотим отправить несколько электронных писем (receientsAddresses> 1), мы должны проверить статистику для этот пользователь, который хочет отправить эту партию электронных писем, до зацикливания и обработки.

Резюме, что мы должны делать

  1. Выберите тип электронной почты - SYSTEM или NON_SYSTEM
  2. Выберите тип отправки (одно письмо или несколько)
  3. Если несколько отправка электронной почты И тип сообщения равен NON_SYSTEM - до обработки в l oop мы должны вызвать функцию getStatistics

Я не профи в OOP, поэтому мне нужен совет, как мне следует перепроектировать мою систему.

I Предположим, что я могу переместить логи c обработки типа электронной почты в стратегию, но я хочу избежать дублирования логи c с проверкой типа электронной почты для многократной отправки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...