我们能够通过服务的类型看到它提供了 Invoicing 接口并且需要 InvoiceProcessing 接口。从服务的类型中,我们知道连接到服务的消费者要使用该服务必须做什么,以及 Invoicer (或者任何其他的提供者)要实现它必须做什么。服务的任何使用和实现必须同服务的规范及其协议相一致。
货品计价 <service> 端口也能够为各组件相连接的使用,指定由 Invoicer 组件所提供的可能的绑定。不同的可能的绑定方法,例如 IIOP 之上的 RMI (Internet Inter-ORB Protocol 之上的 Remote Method Invocation) 或者 HTTP 之上的 SOAP,能够再一次对服务的性能、可用性和安全性产生深刻的影响。因此,这些关注应当作为服务设计的一部分,即使它们可能是针对特定平台的。至少,解决方案设计应当处理服务连接器是本地的、远程的、还是两者皆是。
Invoicer 提供 Invoicing 接口,它涉及到两个操作:
initiatePriceCalculation
completePriceCalculation
Invoicer 必须提供一个用于每一项服务操作的实现或者方法的设计。该方法还必须在价格计算被完成时,调用 InvoiceProcessing 接口的 processInvoice 操作。图9显示了 Invoicer 组件拥有的两个在被提供的操作中有同样名称的行为。
图9. Invoicer 服务接口
completePriceCalculation 活动是用于 Invoicing::completePriceCalculation 服务操作的方法。它使用不透明的行为来计算合计价格,然后调用货品计价端口的 InvoiceProcessing::processInvoice 操作。(processInvoice 行动的目标输入插口就是货品计价端口。)请注意这同 InvoicingService 服务规范所指定的货品计价协议是一致的。
initiatePriceCalculation 不透明行为是用于 initiatePricesCalculation 服务操作的方法。该操作通过使用从不透明行为的代码体中捕获的 Java? 代码来实现。