2017-06-20 4 views
0

のサービス層から別のエンティティのリポジトリを呼び出す2つのエンティティがあります。招待グループは、エンティティ

ユーザーがグループに別のユーザーを招待することができます。招待レストAPIエンドポイントのコントローラーと、ビジネスロジックを実装するサービスレイヤーがあります。

方法を受け入れるが、招待サービスレイヤで定義されています

public void accept(long invitationId, String username) { 
    Invitation invitation = this.loadById(invitationId); 
    User user = userService.loadByUsername(username); 
    validateAccessToInvitation(invitation, user); 
    Group group = invitation.getGroup(); 
    group.addMember(user); 
    invitationRepository.delete(invitation); 
    // groupRepository.save(group); 
} 

私は別のエンティティリポジトリ(ここでは:group repository)にアクセスすることをお勧めかどうかを知りたいのですが、いくつかのエンティティのサービス層(ここで:invitationサービス層)。

1つのオプションは、サービスレイヤーgroupsaveメソッドを追加することです。しかし、それはgroupRepositoryのセーブだけを呼び出すでしょう。それはどういうわけか、それは良いデザインではないはずです。

+0

サービスが複数のリポジトリにアクセスするとうまくいくと思います。ビジネスロジックの一部なので、一緒に使用してください。 – StanislavL

+0

ここでベストプラクティスは何ですか? –

答えて

0

おそらく、グループのサービスレイヤークラスでaddMemberToGroupメソッドを公開することを検討します。そのロジックはすべてバンドルされています。グループにメンバーを追加するロジックが決して変化しない場合は、中央の明確な場所でそれを行うことができます。

私は、この方法が単一の責任の原則に違反する可能性があると言っています。

+0

'招待'サービス層で 'group'エンティティをイベント処理するべきではないのですか? –

+0

あなたはそれを処理すべきであるか、または処理すべきではないという固くて速いルールはないので、それは個人的な好みになります。個人的には、意図を明確に表現するために、グループ固有のロジックを独自の方法に分離することをお勧めします。 –

関連する問題