由於數據庫的設計,我有相當多的JpaRepository
擴展的存儲庫接口。Spring Data:將多個存儲庫接口合併到一個「存儲庫」服務類
爲了構建一個簡單的對象,例如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
類中的不同方法調用這些存儲庫。我曾想過把這個課程分成多個班級,但我認爲這不是正確的。
相反,我想使用一個repositoryService
,它將包括創建Person
對象所需的所有存儲庫。這是一個好方法嗎?春天有可能嗎?
我問的原因是,有時候注入服務的人數約爲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