Вот абстрактный вопрос с последствиями для реального мира.
У меня есть два микросервиса;давайте назовем их CreditCardsService
и SubscriptionsService
.
. У меня также есть SPA, который должен использовать SubscriptionsService
, чтобы клиенты могли подписаться.Для этого у SubscriptionsService
есть конечная точка, в которой вы можете POST
модель подписки для создания подписки, и в этой модели creditCardId
указывает на кредитную карту, которая должна оплачивать подписку.Существуют определенные бизнес-правила, которые указывают, можете ли вы использовать указанную кредитную карту для подписки (срок действия истек более 12 месяцев, это VISA и т. Д.).Эти конкретные бизнес-правила связаны с SubscriptionsService
. Проблема в том, что команда, работающая в SPA, хочет конечную точку /CreditCards
в SubscriptonsService
, которая возвращает все действительные кредитные карты пользователя, которые могут бытьиспользуется в модели подписок.Они не хотят реализовывать те же правила проверки бизнеса в SPA, которые находятся в самом SubscriptionsService
.
Мне кажется, это идет вразрез с принципами SOLID, которые являются центральными для проектирования микросервисов;конкретно разделение интересов.Я также спрашиваю себя, какой прецедент это собирается создать?Нам нужно добавить конечную точку /CreditCards
в Службу OrdersService или любую другую службу, которая может использовать creditCardId
в качестве свойства своей модели?
Итак, главный вопрос заключается в следующем: как лучше всего это спроектировать?Следует ли дублировать логику проверки бизнеса между внешним и внутренним интерфейсом?Должна ли эта новая конечная точка быть добавлена к SubscriptionsService
?Должны ли мы попытаться упростить бизнес-логику?