6

リポジトリを含むデータレイヤーを備えた多層アプリがあります。

これに加えて、サービスレイヤーがあります。私の理解では、リポジトリごとに1つのサービスが必要です。

サービスAにServiceBの別のメソッドを呼び出させても大丈夫ですか?もちろん、これにより、サービスAのサービスBへの依存関係が作成されます(私はインターフェイスとDIを使用しています)。

私の例では、ユーザーの追加、ユーザーの認証、IDによるユーザーの検索などを処理するユーザーサービスがあります。また、特定のユーザーの本を追加できるブックサービスもあります。

ブックサービスは、ブックを追加するユーザーインスタンスを取得するために、ユーザーサービスを呼び出す必要がありますか?

4

3 に答える 3

8

簡単な答え:はい

もう少し短い:

別の方法は、「ブックサービス」が「ユーザーリポジトリ」に直接アクセスできるようにするか、ユーザーサービスを拡張してブックを追加できるようにすることです。どちらも適切なオプションではありません...したがって、説明したことを実行するのは正しいです(ブックサービスはユーザーサービスにアクセスします)...より「純粋なオプション」は、ブックサービスとユーザーサービスを使用して、記述した内容を実現するコントローラー/集約/トランザクション/コーディネーターサービスを作成することです。このように、両方の「直接サービス」 (本とユーザー)「依存関係のない」状態を維持...

于 2011-10-26T18:56:43.853 に答える
1

はい、そうすることが理にかなっている限り、これは許容されます。

ブックサービスがユーザーサービスから実行するロジックを必要とし、ブックサービスがユーザーサービスを呼び出さない場合は、ブックサービスでユーザーサービスロジックを複製する必要があります。つまり、ビジネスロジックがサービスロジックの機能に合わせて変更された場合は、必ずブックサービスをロジックで更新する必要があります。そうしないと、バグが発生し、一貫性のない(予期しない)動作が発生します。

ただし、これが頻繁に発生する場合は、各サービスがどのような機能を実行するかを調べ始め、場合によってはそれらをより小さなサービスに分割する必要があります。

于 2011-10-26T18:58:46.943 に答える
0

ユーザーは、EFを使用していると述べました。この場合、彼はユーザーオブジェクトをブックサービスまたはユーザーIDに渡し、保存する前にブックリポジトリにユーザーオブジェクトを作成することができます。

于 2011-10-26T18:54:33.417 に答える