1

私は、同様のタイトルの質問を成功裏に見ました。他のビジネスエンティティからデータを引き出すためにビジネスレイヤからサービス参照を作成することはできますか?それともサービス層から行うべきでしょうか?ビジネスレイヤーからサービスレイヤーへのサービス参照

+0

ありがとうございました!ちょうど前の質問のためにした... –

答えて

4

これは、巨大な哲学的議論に巻き込まれる可能性があるため、答えにくいです。しかし、私はあなたのビジネスロジック層が他のビジネスエンティティを得るためにあなたのサービス層に戻るべきではないと思います。

このシナリオの典型的なアプローチは、ビジネスロジックの上にファサードレイヤーを置くことです。そのレイヤーは、複数のビジネスエンティティーの検索が必要な場合に、応答を調整する責任があります。だから、:

サービス - >ビジネスファサード - >ビジネスロジック - >データ

EDIT:小さな、簡単なアプリケーションのために、これはやり過ぎです。ファサードレイヤーを削除し、単にサービスメソッドを呼び出して論理メソッドを呼び出すか、サービスが複数のロジックメソッドを呼び出させるようにします。

サービスレイヤーは実際にはパススルーに過ぎず、できるだけロジックが少ない方がよいでしょう。そのため、サービス層を交換するか、サービスコールを行う必要がないときに、信頼できるアプリケーション/サービスに(ローカルマシン上の)ファサードレイヤを直接呼び出すことができます。

このアプローチでは、ファサードレベルで「信頼ライン」を配置し、セキュリティを実装することもできます。セキュリティーチェックが行われる場合、そしておそらくこの「信頼ライン」で他のものが実行される場合、ビジネスファサードへのサービスコールが1つだけ必要なので、検索する必要がある各エンティティごとにこのロジックを繰り返しません。

ファサードレイヤーは、単にロジックレイヤー上のメソッドを呼び出すメソッドレイヤーです。ファサードメソッドは、ロジックレイヤー上の1つのメソッドを呼び出すのと同じくらい簡単なものでもよく、ロジックレイヤー上の複数のメソッドを呼び出し、適切なドメインエンティティ、またはDTOのコヒーレントな応答を調整するだけの複雑さがあります。

私は続けることができます。実際、この議論に専念する本が全部あります。うまくいけば、それは少なくとも幅広い概観に役立ちます。

+0

ボブはあなたがいいえと言っている!ビジネス層からのサービスリファレンス?この場合、ビジネスファサードのための別のVSプロジェクトをお勧めしますか? (これはサービスレイヤとは別のものです)。 –

+0

正しい。うまくいけば、あなたのビジネス層は安全なマシン上で実行されており、クライアントコードはそれらを直接呼び出さないことが望ましいでしょう。クライアントコードはサービスレイヤを呼び出し、サービスレイヤはビジネスファサードなどを呼び出します。通常は別のプロジェクトがありますが、これはどれだけ大きなものかによって異なります。大きなアプリの場合は、別のプロジェクトを使用します。 –

+0

ありがとうございました! –

関連する問題