модель которую я использую во всех микросервисах. Я копипастой дублирую ее в каждый микросервис.
Соответственно когда мне нужно эту модель поменять, мне нужно не забыть ее обновить в каждом микросервисе. Забыл поменять, не уследил, и где-то в результате возникла проблема.
Есть ли какая-нибудь магия(практика) которая как-то регулирует эту проблему?
А почему, собственно, модель влияет на все микросервисы? Она откуда в эти микросервисы приходит? Общая БД? Или общий сервис, который эту модель в МСы передаёт? У Вас точно не распределенный монолит?
В моем примере бекенд e-commerce приложения, модель Product, она используется в order-service, recommendation-service, statistics-service и т.п.
Да, это скорее распределенный монолит
Может, тогда ее в отдельный сервис вынести?
ну такое. самое правильное - так не делать. общая модель у разных микросервисов - это такое. чуть менее правильный вариант - это притащить какой-то условный open-api, генерить модели по нему. еще чуть менее - сделать чисто либу/проект с моделями и шарить между всеми, кому нужно. еще чуть менее - вытащить в микросервисе, в котором эта модель появилась изначально ее в под-модуль api и так же таскать как зависимость между остальными. совсем фиговый - оставить как есть и копипастить. все имхо
структуру сервисов нужно продумывать вместе со структурой команд (можешь посмотреть книжку эрика эванса по ддд, раздел про стратегическое проектирование) в твоём случае дублирование модели не является проблемой, проблемой является то что все сервисы пилит один человек и с его точки зрения это выглядит как повторение одной и той же работы, если бы каждый сервис был в зоне ответственности отдельного человека, это не было бы проблемой а наоборот было преимуществом в виде возможности нескольких людей вносить доработки независимо
Зависит от того, единый репозиторий для всех сервисов используется или нет. Если каждый сервис в своей репе, то будет сложно. Если все в одной репе, то можно выделить модель в отдельный модуль, у которого сделать подмодули для атомарных элементов модели. И потом добавлять в нужные микросервисы модулями зависимости к нужным кускам модели.
Обсуждают сегодня