サービスレイヤーの作成を決定する要因は多数あります。次の理由で、過去にサービスレイヤーを作成しました。
- 複数のクライアントが再利用する必要があるコード。
- ライセンスが制限されているサードパーティのライブラリ。
- システムへの統合ポイントを必要とするサードパーティ。
- 複製されたビジネスロジックを集中化します。
ケース1:無数のさまざまなクライアントが使用する必要がある基本機能を作成しています。サービスレイヤーは、さまざまなクライアントがすぐに提供された機能を利用できる機能を組み込みます。
ケース2:通常、アプリスペースでコードをホストしていますが、ライセンスが制限されているサードパーティのライブラリを使用しています。この場合、どこでも使用したいリソースがありますが、限られた数だけです。サービスの背後でホストする場合、組織全体が各ホスティングのライセンスを購入することなく、アプリケーションから使用できるようになります。
ケース3:サードパーティが通信するための機能を構築しています。この例では、在庫エンドポイントを設定して、ベンダーが製品の入荷に関するメッセージを渡すことができるようにすることができます。
ケース4:エンタープライズ全体でコードを分析し、別々のチームが同じものを作成していることがわかりました(わずかに異なる方法で実装されただけです)。サービスレイヤーを使用すると、最適なアプローチを選択できます。また、サービスを呼び出すことで、すべてのチームに同じプロセスを実装できます。ロジックを集中化するもう1つの利点は、バグが見つかったときです。これで、修正プログラムを1回展開するだけで、すべてのクライアントが同時にメリットを享受できます。
これはすべて、サービスレイヤーにマイナスの可能性があると言われています。
- システムの複雑さが増します。以前はデバッグするアプリケーションが1つだけだったのに、2つありました。運用上の問題には、クライアントアプリの設定、サービスアプリの設定、またはクライアントアプリとサーバーアプリが正しくセットアップされていない場合の通信の問題を確認する必要があります。これまで経験したことがない場合、これは注意が必要です。
- 障害の一点。サービスが停止すると、すべてのクライアントが影響を受けます。この方法でコードが展開されていない場合、リスクは低くなります(ただし、これを軽減する方法はあります)。
- バージョニングを行うのは難しい場合があります。インターフェースを展開するサービスを使用する1つのアプリがある場合、2つの間で同時に変更を行うことができます。複数のクライアントがある場合は、V1のユーザーを管理し、V2のユーザーを管理し、V1の削除を調整する必要があります(すべてのユーザーがV2に更新したことがわかったら)。
主なポイントは、システムをサービス指向にすることは必ずしもスラムダンクではないということです。私の経験では、通常は良いアイデアです(この方法でアプリケーションを構築する傾向があります)が、それは自動的な決定ではありません。結局のところ、長所と短所を比較検討し、あなたの状況に合った決定を下す必要があります。