同じ記事から:
「明確に定義された「契約条件」とインターフェースを使用して、あるエンティティまたは複数のエンティティが他のエンティティに提供する機能。」(出典: OMG SoaML 仕様 - イタリック体)
私の意見では、これは「反復可能な活動」について話している定義よりも好ましい定義です。
定義のキーワードは機能です。機能とは、BPM 業界から引き継がれたビジネス機能を指しますが、SOA のコンテキストでは、明確な境界を持つビジネス ドメインを指します。
したがって、この定義から、サービスは公開する必要があるか、ビジネス機能/プロセスの境界内で動作する必要があると推測できます。これは、サービスが明確に定義された境界内で自律的であるべきであるという (SOAのプリンシパルまたはテナントからの) アイデアに私たちを導きます。
あなたの例では、あなたは尋ねています
それで、サービスStoreFrontですか?または、2 つのサービス (GetPrice と AddToCart) がありますか?
それに対する答えはいつものように「場合による」です。ただし、通常、価格設定 (GetPrice) は注文 (AddToCart) とは異なるビジネス機能に属します。さらに、操作は他のいくつかの重要な点で異なります。
- GetPrice は読み取り操作ですが、AddToCart は書き込み操作です。
- GetPrice は同期操作ですが、AddToCart は非同期操作である可能性が非常に高くなります
これらのことから、おそらく、ビジネスの観点からは 2 つの異なるサービスであると想定する必要があります。
この仮定には、いくつかの根本的な影響があります。それらが2つのサービスである場合、SOAによれば、それらは自律的でなければなりません。つまり、サービス間の結合を可能な限り最小限に抑え、可能な限りサービスを個別の関心事として計画、開発、テスト、構築、展開、ホスト、サポート、および管理できるようにする必要があります。
もう 1 つの反響は、サービスをこの程度まで物理的に分離する場合、どうすればこれらのものを一緒にユーザーに見せることができるかということです。それらは異なる機能である可能性がありますが、それでも画面上で連携する必要があります。
さらに、バックエンドの観点からすると、注文は価格データについて知る必要があります。データベースを 2 つに分けた場合、Checkout サービスは、どのくらいの費用がかかるか、どの割引を適用するかなどをどのように知ることができますか?
この内容については以前にも投稿しましたので、よろしければご覧ください。Lewis と Fowler によるMicroservicesに関する優れた記事も読むことをお勧めします。