Opengroup SOA本体服务与服务接口与服务合同

时间:2014-04-30 22:52:19

标签: architecture uml soa togaf

我试图理解本文档中的定义。 http://www.opengroup.org/soa/source-book/ontologyv2/service.htm

他们对服务,服务接口和服务合同的定义要么不清楚,要么与我通常遇到的不同。

服务:

  

“服务是可重复活动的逻辑表示   有一个特定的结果。它是独立的,是一个“黑匣子”   它的消费者。“

假设我有一个WCF项目,它有两个操作 店面 +用getPrice + AddToCart

定义说“可重复的活动”。 StoreFront服务也是如此?或者我有两个服务(GetPrice和AddToCart)。

服务合同: 有一个“效果”类。效果是“退货价格”和“加入购物车”吗?

1 个答案:

答案 0 :(得分:1)

来自同一篇文章:

  

一个或多个实体向其他人提供的“功能   定义明确的'条款和条件'和接口。“(来源:OMG   SoaML规范 - 我的斜体)

在我看来,这是一个更好的定义,而不是那个谈论"可重复的活动"。

定义中的关键词是 capability 。能力是指Business Capability,它是BPM行业的结转,但在SOA上下文中指的是具有不同边界的业务域。

因此,从这个定义我们可以推测服务应该暴露或应该在业务能力/流程边界内运作。这导致我们(在SOA的principals or tenants中)认为服务应该在明确定义的边界内自治。

在您的示例中,您要求

  

服务StoreFront也是如此?或者我有两个服务(GetPrice和   AddToCart)

对此的回答一直是"它取决于"。但是,一般来说,Pricing(GetPrice)将属于Ordering(AddToCart)的不同业务功能。此外,这些操作在其他一些重要方面也有所不同:

  • GetPrice是一个读操作,而AddToCart是一个写操作。
  • GetPrice是一个同步操作,而AddToCart很可能是异步的

因此,从这些角度来看,我们应该假设从业务角度来看它们是两种不同的服务。

这个假设有一些根本性的影响。如果它们是两个服务,那么根据SOA它们应该是自治的。这意味着我们应该以各种可能的方式尽量减少服务之间的耦合,以便尽可能地将它们作为单独的问题进行规划,开发,测试,构建,部署,托管,支持和管理。

另一个影响是,当您将服务实际分离到这个程度时,如何将这些内容一起显示给您的用户?它们可能是不同的功能,但它们仍然需要在屏幕上一起工作。

此外,从后端角度来看,订购需要了解定价数据,否则订单履行如何发生?如果您已将数据库分成两部分,Checkout服务如何知道需要支付多少费用,应用哪些折扣等?

我已发布有关此内容的before,所以请随时阅读。我建议阅读Lewis和Fowler关于Microservices的优秀文章。