我试图理解本文档中的定义。 http://www.opengroup.org/soa/source-book/ontologyv2/service.htm
他们对服务,服务接口和服务合同的定义要么不清楚,要么与我通常遇到的不同。
服务:
“服务是可重复活动的逻辑表示 有一个特定的结果。它是独立的,是一个“黑匣子” 它的消费者。“
假设我有一个WCF项目,它有两个操作 店面 +用getPrice + AddToCart
定义说“可重复的活动”。 StoreFront服务也是如此?或者我有两个服务(GetPrice和AddToCart)。
服务合同: 有一个“效果”类。效果是“退货价格”和“加入购物车”吗?
答案 0 :(得分:1)
来自同一篇文章:
一个或多个实体向其他人提供的“功能 定义明确的'条款和条件'和接口。“(来源:OMG SoaML规范 - 我的斜体)
在我看来,这是一个更好的定义,而不是那个谈论"可重复的活动"。
定义中的关键词是 capability 。能力是指Business Capability,它是BPM行业的结转,但在SOA上下文中指的是具有不同边界的业务域。
因此,从这个定义我们可以推测服务应该暴露或应该在业务能力/流程边界内运作。这导致我们(在SOA的principals or tenants中)认为服务应该在明确定义的边界内自治。
在您的示例中,您要求
服务StoreFront也是如此?或者我有两个服务(GetPrice和 AddToCart)
对此的回答一直是"它取决于"。但是,一般来说,Pricing(GetPrice)将属于Ordering(AddToCart)的不同业务功能。此外,这些操作在其他一些重要方面也有所不同:
因此,从这些角度来看,我们应该假设从业务角度来看它们是两种不同的服务。
这个假设有一些根本性的影响。如果它们是两个服务,那么根据SOA它们应该是自治的。这意味着我们应该以各种可能的方式尽量减少服务之间的耦合,以便尽可能地将它们作为单独的问题进行规划,开发,测试,构建,部署,托管,支持和管理。
另一个影响是,当您将服务实际分离到这个程度时,如何将这些内容一起显示给您的用户?它们可能是不同的功能,但它们仍然需要在屏幕上一起工作。
此外,从后端角度来看,订购需要了解定价数据,否则订单履行如何发生?如果您已将数据库分成两部分,Checkout服务如何知道需要支付多少费用,应用哪些折扣等?
我已发布有关此内容的before,所以请随时阅读。我建议阅读Lewis和Fowler关于Microservices的优秀文章。