【发布时间】:2019-06-30 15:01:53
【问题描述】:
这是一个涉及现实世界的抽象问题。
我有两个微服务;我们称它们为CreditCardsService 和SubscriptionsService。
我还有一个应该使用SubscriptionsService 的 SPA,以便客户可以订阅。为此,SubscriptionsService 有一个端点,您可以在其中POST 订阅模型来创建订阅,并且在该模型中是一个 creditCardId 指向应该支付订阅费用的信用卡。有某些业务规则规定您是否可以使用所述信用卡进行订阅(到期时间超过 12 个月,它是 VISA 等)。这些特定的业务规则绑定到SubscriptionsService
问题在于,处理 SPA 的团队希望在 SubscriptonsService 中有一个 /CreditCards 端点,该端点返回可以在订阅模型中使用的用户的所有有效信用卡。他们不想在 SPA 中实现与 SubscriptionsService 本身相同的业务验证规则。
在我看来,这似乎违背了微服务设计的核心 SOLID 原则;特别是关注点分离。我也问自己,这要开什么先例?我们是否必须将/CreditCards 端点添加到OrdersService 或任何其他可能使用creditCardId 作为其模型属性的服务?
所以主要问题是:设计这个的最佳方法是什么?业务验证逻辑是否应该在前端和后端之间重复?是否应该将此新端点添加到SubscriptionsService?我们是否应该尝试简化业务逻辑?
【问题讨论】:
标签: domain-driven-design microservices solid-principles separation-of-concerns ddd-service