来自同一篇文章:
“一个或多个实体使用明确定义的‘条款和条件’和接口向其他实体提供的能力。” (来源:OMG SoaML 规范 - 我的斜体)
在我看来,这比谈论“可重复活动”的定义更可取。
定义中的关键词是能力。能力是指业务能力,它是从 BPM 行业继承而来的,但在 SOA 上下文中是指具有不同边界的业务领域。
因此,根据这个定义,我们可以推测服务应该公开或应该在业务能力/流程边界内运行。这导致我们(来自 SOA 的负责人或租户)的想法是,服务应该在明确定义的边界内是自治的。
在您的示例中,您在问
服务 StoreFront 也是如此吗?或者我有两个服务(GetPrice 和 AddToCart)
与往常一样,答案是“视情况而定”。但是,通常定价 (GetPrice) 与订购 (AddToCart) 属于不同的业务能力。此外,这些操作在其他一些重要方面有所不同:
- GetPrice 是一个读操作,而 AddToCart 是一个写操作。
- GetPrice 是一个同步操作,而 AddToCart 很可能是异步的
因此,从这些我们可能应该假设从业务角度来看它们是两种不同的服务。
这个假设有一些激进的影响。如果它们是两个服务,那么根据 SOA,它们应该是自治的。这意味着我们应该寻求以各种可能的方式最小化服务之间的耦合,以便尽可能地将它们作为单独的关注点进行规划、开发、测试、构建、部署、托管、支持和管理。
另一个影响是,当你在物理上分离服务到这种程度时,你怎么能把这些东西一起展示给你的用户呢?它们可能是不同的能力,但它们仍然需要在屏幕上协同工作。
此外,从后端的角度来看,订购需要了解定价数据,否则如何执行订单?如果您已将数据库一分为二,结帐服务如何知道材料的成本、要应用的折扣等?
我之前已经发布过有关这些内容的内容,因此请随时阅读。我也推荐阅读Lewis 和 Fowler撰写的关于微服务的优秀文章。