Добрый день) Мне нужна помощь для принятия правильного решения, какой шаблон я должен использовать или как я должен изменить свою структуру классов, чтобы сделать код более пригодным для повторного использования.
Итак, у меня есть маршрут, который отправляет процесс запрос по электронной почте одному получателю. Мы обрабатываем два типа электронных писем: 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), мы должны проверить статистику для этот пользователь, который хочет отправить эту партию электронных писем, до зацикливания и обработки.
Резюме, что мы должны делать
- Выберите тип электронной почты - SYSTEM или NON_SYSTEM
- Выберите тип отправки (одно письмо или несколько)
- Если несколько отправка электронной почты И тип сообщения равен NON_SYSTEM - до обработки в l oop мы должны вызвать функцию getStatistics
Я не профи в OOP, поэтому мне нужен совет, как мне следует перепроектировать мою систему.
I Предположим, что я могу переместить логи c обработки типа электронной почты в стратегию, но я хочу избежать дублирования логи c с проверкой типа электронной почты для многократной отправки.