Robicie dodatkowe interfejsy nad interfejsemi repozytoriów Spring Data JPA czy to nie ma sensu? Zmienialiście w ogóle kiedyś implementacje repository w projekcie? Mówię o czymś takim:
@Repository @RequiredArgsConstructor class JpaUserRepositoryAdapter implements UserRepository {
private final JpaUserRepository jpaUserRepository;
@OverRide public User add(User user) { return jpaUserRepository.save(user); }
@OverRide public Optional<User> getByMail(String mail) { return jpaUserRepository.findByMail(mail); }
@OverRide public Optional<User> getByPasswordResetToken(UUID passwordResetToken) { return jpaUserRepository.findByPasswordResetToken(passwordResetToken); }
@Nofenak: ofc np w projekcie mam jednocześnie bazę SQL i noSQL do innych rzeczy stąd w tym przypadku to podstawa. No i do tego dochodzi elasticssearch, więc 3 "bazy"
Nie wchodząc w szczegóły - niektóre encje muszę mieć w 2-3 miejscach
Nie jest to związane z architekturą hexagonalna - inaczej porty i adaptery? Masz tutaj interfejs do bazy, i niezależnie od infrastruktury twoje repo działa tak samo. Możesz podmieniać silnik bazy bez zmian. Do tego możesz pisać testy logiki biznesowej których jedynym powodem do niepowodzenia jest sama logika a nie np baza czy błędne dane.
@Repository
@RequiredArgsConstructor
class JpaUserRepositoryAdapter implements UserRepository {
private final JpaUserRepository jpaUserRepository;
@OverRide
public User add(User user) {
return jpaUserRepository.save(user);
}
@OverRide
public Optional<User> getByMail(String mail) {
return jpaUserRepository.findByMail(mail);
}
@OverRide
public Optional<User> getByPasswordResetToken(UUID passwordResetToken) {
return jpaUserRepository.findByPasswordResetToken(passwordResetToken);
}
@OverRide
public boolean existsByMail(String mail) {
return jpaUserRepository.existsByMail(mail);
}
}
#java #programowanie #programista15k #naukaprogramowania
Nie wchodząc w szczegóły - niektóre encje muszę mieć w 2-3 miejscach
Masz tutaj interfejs do bazy, i niezależnie od infrastruktury twoje repo działa tak samo. Możesz podmieniać silnik bazy bez zmian. Do tego możesz pisać testy logiki biznesowej których jedynym powodem do niepowodzenia jest sama logika a nie np baza czy błędne dane.