データベースの設計上、かなりの数のJpaRepository
拡張リポジトリインタフェースがあります。Spring Data:複数のリポジトリの1つの「リポジトリ」サービスクラスへのインタフェース
単純なオブジェクト、すなわちPerson
を構築するには、データがデータベース全体にそのように広がっているため、約4 - 5リポジトリへのメソッド呼び出しを行う必要があります。このような何か(擬似コードのための恩赦):
@Service
public class PersonConstructService {
public PersonConstructService(Repository repository,
RepositoryTwo repositoryTwo,
RepositoryThree repositoryThree) {
public Person constructPerson() {
person
.add(GetDataFromRepositoryOne())
.add(GetDataFromRepositoryTwo())
.add(GetDataFromRepositoryThree());
return person;
}
private SomeDataTypeReturnedOne GetDataFromRepositoryOne() {
repository.doSomething();
}
private SomeDataTypeReturnedTwo GetDataFromRepositoryTwo() {
repositoryTwo.doSomething();
}
private SomeDataTypeReturnedThree GetDataFromRepositoryThree() {
repositoryThree.doSomething();
}
}
}
PersonConstructService
クラスは、単純なPerson
オブジェクトを構築するために、すべてのこれらのインターフェイスを使用しています。私はこれらのリポジトリをPersonConstructService
クラス内のさまざまなメソッドから呼び出すことにしています。私はこのクラスを複数のクラスに広げることを考えましたが、これは正しいとは思いません。
代わりにPerson
オブジェクトの作成に必要なすべてのリポジトリを含むrepositoryService
を使用します。それは良いアプローチですか?春には可能ですか?
私が尋ねる理由は、クラスに注入されたサービスの数が時々約7-8であるということです。これは間違いなく良いことではありません。
Springでは、あなたのクラスですぐにサービスを利用できるようにするために、まず '@ Autowired'アノテーションを使用することができますが、' PersonConstructService'クラスからリポジトリメソッドを直接呼び出すべきではありません。それは問題ではありません。クラス内で7つのサービスが必要な場合、なぜこれらの7つのサービスを呼び出すのが悪いのですか?あなたのPOJOが( '@ ManyToOne'、' @ OneToMany'、...)のような関係で結ばれているかどうかは、手動で他のものを手作業で追加することなく単純に作ることができると思います。 – Alex
@Alexあなたのクラスコンストラクタで、理解しているように、Spring Docsによると、多くのサービスがあるとします。「副次的なことに、コンストラクタ引数の多くは悪いコードの匂いです。あなたはこれを使ってフィールドインジェクションを提案していますか?\t 'Springでは、あなたのクラスであなたのサービスをすぐに利用できるように、@Autowiredアノテーションを使用することができます'? –
はい、まあまあです。コンストラクタの引数は大事なことですが、あなたのサービスは、あなたが望むものを適切に行う別の方法です。 Java EEはすでにv6でこれを '@ Inject'で実装していますが、Springの公式キーワードは' @ Autowired'です。私は自分のクラスのうちのいくつかを人格的に6または7個持っています。 – Alex